- 在Go中名字一般用CamelCase
- 首字母大写:public
- 首字母小写:private
包
- 每个目录一个包
- main包包含可执行入口
- 为结构定义得方法必须放在同一个包内
- 可以时不同得文件
如何扩充系统类型或者别人得类型
- 定义别名
- 使用组合
- 使用内嵌来扩展已有类型
Go语言的依赖管理
- 依赖的概念
依赖第三方的库
- 依赖管理的三个阶段 GOPATH, GOVENDOR, go mod
GOPATH
拉取的第三方库会放到GOPATH目录的src下,go build 默认从GOROOT的src 和GOPATH 的src目录下去寻找依赖。
如果GOPATH下创建了多个project,每个project依赖同一个第三方库,可能就会产生冲突。这时我们可以通过GOVENDOR来解决冲突。
cd /tmp
mkdir gopathtest
export GOPATH=/tmp/gopathtest
mkdir src
export GO11MODULE=off
//拉取zap库
go get -u go.uber.org/zap
GOVENDOR
go mod 在Mac中的使用
- 新建go mod项目
项目可以建在顺便拿个目录下,不一定是在GOPATH下。
项目创建之后自动生成go.mod文件
go env查看环境变量 set GO111MODULE=on,拉取第三方库
go get -u go.uber.org/zap //默认拉取最新版本
go get -u go.uber.org/zap@v1.11 //拉取指定版本
go mod tidy //清理无关的依赖
- 如何增加依赖
- go get 拉取依赖
- import 相关的依赖,会自动拉取。
eg. import “github.com/gin-gonic/gin”
- 如何将旧的项目迁移到go mod中
go mod init [modName]
go build ./... //会自动拉取所有依赖库
Windows 下go mod 无法直接使用
go env -w GO111MODULE=on
//拉取第三方库
go get -u go.uber.org/zap
//在项目中引用 包
import "go.uber.org/zap"
go mod init
go mod vendor
//在vendor目录下生产拉取的第三方库,将库拷贝到GOPATH目录下
go env -w GO111MODULE=off
go build
- 目录整理
go build 编译出错
每个目录下只能有一个main不然会出现编译错误。
编译产生结果
go build ./...
go install ./...
产生的结果存放于GOPATH/bin