9月
05
在 Go 1.5 及后续版本中,可以通过创建 internal 代码包让一些程序实体仅仅能被当前模块中的其他代码引用。这是第三种访问权限:模块级私有。
- 导出路径包含internal关键字的包,只允许internal的父级目录及父级目录的子包导入,其它包无法导入。
9月
05
https://github.com/danceyoung/paper-code/blob/master/package-oriented-design/packageorienteddesign.md
序
本篇内容主要讲解golang项目的面向包设计准则和基础的架构分层。
信息来自原文
内容进行翻译、加工、整合及结合个人的实践经验,并附有一个真实的例子来解释本篇内容。
当然你也可以直接阅读英文原文。
当然高手如云,只是懒得写罢了。
百年太久,只争朝夕,不负韶华,不枉少年,来日怎方长。
继续阅读
7月
28
很多时候,都是终端里看信息。多色的信息就很好看了。我是一个实在人,就从零开始搞一个。其实是别人搞好了,我拿来用。
开始
终端高亮,我们用这个 https://github.com/mgutz/ansi
先建立一个 go 项目
mkdir artisan
cd artisan
go mod init artisan
再安装 ansi
go get github.com/mgutz/ansi
然后再封装一个调用方法包
mkdir -p pkg/console
touch pkg/console/console.go
console.go
// Package console 命令行辅助方法
package console
import (
"fmt"
"os"
"github.com/mgutz/ansi"
)
// Success 打印一条成功消息,绿色输出
func Success(msg string) {
colorOut(msg, "green")
}
// Error 打印一条报错消息,红色输出
func Error(msg string) {
colorOut(msg, "red")
}
// Warning 打印一条提示消息,黄色输出
func Warning(msg string) {
colorOut(msg, "yellow")
}
// Exit 打印一条报错消息,并退出 os.Exit(1)
func Exit(msg string) {
Error(msg)
os.Exit(1)
}
// ExitIf 语法糖,自带 err != nil 判断
func ExitIf(err error) {
if err != nil {
Exit(err.Error())
}
}
// colorOut 内部使用,设置高亮颜色
func colorOut(message, color string) {
fmt.Fprintln(os.Stdout, ansi.Color(message, color))
}
最后,新建一个 main.go 然后,调用
touch main.go
package main
import "artisan/pkg/console"
func main() {
console.Success("多少恨昨夜梦魂中,还似旧时游上苑。车如流水马如龙,花月正春风。")
}
go run main.go
这个时候就可以看到绿色的输出了。
7月
21
6月
17
在做 go 测试的时候,经常会有端口被使用,而没停止。停掉该进程就很有必要。
操作一波
# 以 3000 端口为例
lsof -i:3000
# 通过 lsof 命令找到 pid ,杀掉 pid
kill -9 xxxx
6月
15
利用air(git)实现 go 项目的热重启。安装完 air 后,运行 air 出现 zsh: command not found: air 报错。air 是安装在 gopath 的 bin 目录下,终端找不到这个文件。
解决方法
vim ~/.zshrc
# 在末尾追加下边语句,保存
alias air='$(go env GOPATH)/bin/air'
# source 使得配置生效
source ~/.zshrc
再运行 air 发现就可以了。如果不行,是终端对应的配置文件不是这个。
__ _ ___
/ /\ | | | |_)
/_/--\ |_| |_| \_ , built with Go
可是,如果又安装了一个呢。是不是又得再加。这样好麻烦。把 GOPATH BIN 目录加入到环境变量中就可以了的。
vim ~/.zshrc
# 加入下边的,保存
export PATH="$(go env GOPATH)/bin:$PATH"
# source 使得配置生效
source ~/.zshrc
6月
02
12月
29
在一个项目中,环境变量,配置文件这些都是一个很重要的环节。设计好了,体验也会不一般。在 go 中,使用 viper 来构造一个这样的配置环境。
https://github.com/spf13/viper
开始之前
- 在开始之前,我们已经熟悉了 laravel 的配置文件的方式。这里,我们仿照 laravel 的结构方式来组织我们的代码。使用 .env 文件来放置重要配置信息。当然也有 .env.example 。.env 不会加入版本控制中,.env.example 加入版本控制中。
-
go 的 init 函数。相关联文件中, init 函数总是会先执行的。init 函数要慎用,仔细用。导入顺序也很有关系。
-
一个项目中 MVC 是指的是业务逻辑的代码,而除了支撑业务逻辑代码以外,还有底层的辅助代码。例如路由加载、数据库初始化等。在我们的项目中,遵循 Go 社区的惯例,这些底层代码我们会归类为各自的包,并放置于 pkg 目录下。pkg 目录下的包,我们会尽量保持其独立性,这样方便在其他项目中复用。但是最重要的,当前还是以服务 goblog 项目为主。
继续阅读