go mod管理方法
背景
go 通过环境变量 GO111MODULE 的 3 个值 off、on、auto 来决定是否使用 go mod. 这三个值影响分别如下:
- GO111MODULE=off:关闭 go modules 功能,在编译的时候仍旧在 $GOPATH/src 或者 vendor 目录中寻找依赖. 这种包管理模式为 “GOPATH 模式”.
- GO111MODULE=on:开启 go modules 功能,在编译时不会在 $GOPATH/src 中寻找依赖. 将在项目根目录生成 go.mod 文件。同时,依赖包不再存放在 $GOPATH/src 目录,而是存放在 $GOPATH/pkg/mod 目录,多个项目可以共享缓存的 modules。
- GO111MODULE=auto:默认值,在 go v1.13 及之后版本中,如果工程目录下包含 go.mod 文件或者位于包含 go.mod 文件的目录下,则开启 go modules 功能. 在 go v1.11 中 auto 值需要工程在 GOPATH/src 之外的目录中才会开启 go mod,以确保兼容性.
首选开启go modules的方式
实验
检查情况
项目目录为
C:\Users\steff\go\src\learnku\4.2
go工作目录为
C:\Users\steff\go\
下面有三个文件夹,分别是
C:\Users\steff\go
λ ls
bin/ pkg/ src/
依赖包都会放到pkg下,我们搜索这次的目标mux,发现存在
C:\Users\steff\go\pkg\mod\github.com\gorilla\mux@v1.8.0
λ ls
AUTHORS doc.go example_cors_method_middleware_test.go go.mod middleware.go
mux.go mux_test.go README.md regexp_test.go test_helpers.go
bench_test.go example_authentication_middleware_test.go example_route_test.go LICENSE middleware_test.go mux_httpserver_test.go old_test.go regexp.go route.go
手动删除
正确的步骤
修改包管理方式
C:\Users\steff\go\src(master) λ go env -w GO111MODULE=on
go mod init
在项目目录下构建空的go.modC:\Users\steff\go\src\learnku\4.2(master) λ go mod init go: creating new go.mod: module learnku/4.2 go: to add module requirements and sums: go mod tidy
C:\Users\steff\go\src\learnku\4.2(master) λ cat go.mod module learnku/4.2 go 1.18
在项目目录下,下载依赖包
C:\Users\steff\go\src\learnku\4.2(master) λ go get -u github.com/gorilla/mux go: added github.com/gorilla/mux v1.8.0
在此查看go.mod,发现已增加
C:\Users\steff\go\src\learnku\4.2(master) λ cat go.mod module learnku/4.2 go 1.18 require github.com/gorilla/mux v1.8.0 // indirect
这时pkg里是没有mux的,我们直接编译项目代码,发现编译成功。进入pkg目录,发现已自动下载mux。
C:\Users\steff\go\pkg\mod\github.com\gorilla\mux@v1.8.0 λ ls AUTHORS example_route_test.go mux.go regexp.go bench_test.go go.mod mux_httpserver_test.go regexp_test.go doc.go LICENSE mux_test.go route.go example_authentication_middleware_test.go middleware.go old_test.go test_helpers.go example_cors_method_middleware_test.go middleware_test.go README.md
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: