go1.5
- GO15VENDOREXPERIMENT=1 替代GOPATH使用项目中的vendor目录
- 查找顺序 当前包下的vendor目录->向上级目录查找vendor目录->GOROOT->GOPATH
go1.7
- 去掉GO15VENDOREXPERIMENT 默认使用
go1.11
-
GO111MODULE=off on auto 取代vendor包管理 - 项目脱离GOPATH可以放置于任意位置
go1.14
- type A interface {a() b()} type B interface {b() c()} type C interface {A B}
- 实现问题
type Aa struct{} func (Aa) a() {} func (Aa) b() {} type Bb struct{} func (Bb) b() {} func (Bb) c() {} type Cc struct { C } func (Cc) b() {} //must define this func f := Cc { A: Aa{}, B: Bb{}, } - 协程调度用基于系统信号的异步抢占取代了协作式抢占, 有协程死循环也可以被切换出。但如果代码本身直接或间接调用syscall,调用平台相关API,可能触发系统信号,导致协程被切换,因此等切换回来必须检测EINTR错误,并重新调用syscall
- -mod=mod 强制使用module包管理
- GOINSECURE 不强制校验https证书
go module
-
GO111MODULE=off on auto - go modules 在代码目录中生成go.mod go.sum
- go install 将包安装到GOPATH/pkg/mod 编译到GOPATH/bin
- go mod init 初始化go.mod 可以指定自定义名称
- go mod download 下载package
- go mod graph 打印模块依赖结构
- go mod tidy 清理项目, 添加依赖包,删除未使用包
- go mod verify 包校验
- go mod why 查询需要的依赖包
- go mod vendor 将依赖导出到vendor目录
- go mod edit 编辑go.mod
- go list -m -json all 用json格式打印依赖
- go build 时会自动添加依赖并下载
- go get 时会自动添加依赖到mod文件
- go.mod
module github.com/nomadli/agent //项目包路径
go 1.14 //使用的go版本
require ( //用到的包
example.com/apple v0.1.2
example.com/banana v1.2.3
)
exclude example.com/banana v1.2.4 //忽略指定版本的依赖包
replace( //墙掉的库
golang.org/x/crypto v0.0.0-20180820150726-614d502a4dac => github.com/golang/crypto v0.0.0-20180820150726-614d502a4dac
golang.org/x/net v0.0.0-20180821023952-922f4815f713 => github.com/golang/net v0.0.0-20180826012351-8a410e7b638d
golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
)
- go.sum ```