Go 包管理入门简介
一、包
-
包的定义:
- 在golang中,包是多个go源文件的集合,一个package下可以有多个go文件,归属于同一package,完成一个或者一类功能。
-
包的种类:
-
系统内置包:go语言自带包,如str.conv、fmt等
-
自定义包:开发者自己写的包
-
第三方包:属于自定义包的一种,需下载到本地才能使用, 如可以从GitHub上下载的第三方包。
-
-
命名规范
- 一个包里可以定义方法或变量,如果方法名或变量名大写,则此方法或变量可以被其他包引用并使用,表示公有,小写为私有。
二、包管理工具go mod
-
前言(从gopath到go mod)
- 在go的1.11版本之前如果想自定义包需要把项目放在GOPATH目录下。
- 在1.11版本后使用go mod管理项目,需要把项目放在GOPATH下,也无需手动配置环境。
- go的1.13版本之后就彻底不需要GOPATH了。
-
开启go mod
go env -w GO111MODULE=on
-
基本使用
命令 说明 init 初始化go mod,命令:go mod init xxx(package name) download download modules to local cache(全局下载依赖包) edit edit go.mod from tools or scripts(编辑go.mod) graph print module requirement graph (打印模块依赖图) verify initialize new module in current directory(在当前目录初始化mod) tidy add missing and remove unused modules(拉取缺少的模块,移除不用的模块) vendor make vendored copy of dependencies(将依赖复制到vendor下) verify verify dependencies have expected content (验证依赖是否正确) why explain why packages or modules are needed(解释为什么需要依赖) 具体使用案例
# 1, Go mod 初始化 go mod init 模块名 # 2, Go mod 下载到本地Cache go mod download # 2, Go mod 清理本地Cache go clean -modcache # 3, Go mod 编辑go.mod文件:更多go mod查看 `go help mod edit` go mod edit # 4, Go mod 打印依赖图 go mod graph # 5, Go mod 删除错误或者不使用的modules go mod tidy # 6, Go mod 生成vendor目录 go mod vendor # 7, Go mod 验证依赖是否正确 go mod verify # 8, Go mod 查找依赖 go mod why # 9, GO mod 更新依赖到最新版本 go get -u github.com/golang/protobuf # 10, Go mod 更新到指定版本 go get -u github.com/golang/protobuf@指定版本 # 10, Go mod 查看有哪些版本 go list -m -versions github.com/golang/protobuf # 11, Go mod 替换包源 go mod edit -replace=golang.org/x/crypto@v0.0.0=github.com/golang/crypto@latest go mod edit -replace=golang.org/x/sys@v0.0.0=github.com/golang/sys@latest # 12, Go打包给其他包调用 git tag -a v0.0.1 -m "Golang打包给其他包调用" && git push origin v0.0.1 go get -u xxxxxx 本段参考:https://blog.csdn.net/m0_37698164/article/details/127548294
-
go vendor本地缓存
- 目的:启动时如果对应开源包被删除或者不可用,可以使用本地vendor缓存的包
- 命令:
go mod vendor
: 将依赖复制到当前项目的vendor下缓存,便于离线时使用
- 注意:
- 如果离线,即不适用go mod,使用go vendor,需要将项目放在GOPATH/src路径下面,否则包查找会失败,识别不到vendor下面的包。