go mod
GO111MODULE 有三个值:off, on和auto(默认值)
GO111MODULE=off
,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。GO111MODULE=on
,go命令行会使用modules,而一点也不会去GOPATH目录下查找。GO111MODULE=auto
,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:- 当前目录在GOPATH/src之外且该目录包含go.mod文件
- 当前文件在包含go.mod文件的目录下面
依赖包存储位置
- 使用go get获取的包放在
$GOPATH/src/
目录下 - 使用go mod下载的依赖包放在
$GOPATH/pkg/mod/
目录下,所有项目共享
Go version<1.13
linux下 export GO111MODULE=on win下 set GO111MODULE=on
Go version >= 1.13
go env -w GOPROXY=https://goproxy.cn,direct go env -w GO111MODULE=on
win下已经设置为on了重复设置报错的话,可通过set GO111MODULE=on
goland设置识别go mod
在goland的setting里设置启用Go Modules goland Preference->Go->Go Modules(vgo) -> Enable Go Modules(vgo)intergration
没使用go mod时
GOPATH/ /bin /pkg /src/ /main.go /hello/test.go
main.go
package main import "test" func main() { test.Say() }
test.go
package hello import "fmt" func Say() { fmt.Println("hello test") }
使用go mod
go mod init gomod
生成go.mod
module gomod go 1.13
main.go
package main import ( "gomod/hello" ) func main() { hello.Say() }
go.mod 提供了module, require、replace和exclude 四个命令
- module 语句指定包的名字(路径)
- require 语句指定的依赖项模块
- replace 语句可以替换依赖项模块
- exclude 语句可以忽略依赖项模块
server.go
D:\wamp64\www\gomod>go run server.go go: downloading github.com/labstack/echo v3.3.10+incompatible go: extracting github.com/labstack/echo v3.3.10+incompatible go: finding golang.org/x/crypto latest 省略.... go: finding golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 ____ __ / __/___/ / ___ / _// __/ _ \/ _ \ /___/\__/_//_/\___/ v3.3.10-dev High performance, minimalist Go web framework https://echo.labstack.com ____________________________________O/_______ O\ ⇨ http server started on [::]:1323
查看go.mod 内容
module gomod go 1.13 require ( github.com/labstack/echo v3.3.10+incompatible // indirect github.com/labstack/gommon v0.3.0 // indirect golang.org/x/crypto v0.0.0-20191112222119-e1110fd1c708 // indirect )
go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit,详见 Modules官方介绍。 go 会自动生成一个 go.sum 文件来记录 dependency tree:
go.sum
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= 省略..... gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
- 可以使用命令
go list -m -u all
来检查可以升级的package,
使用go get -u need-upgrade-package
升级后会将新的依赖版本更新到go.mod - 也可以使用
go get -u
升级所有依赖
有疑问加站长微信联系(非本文作者)