现实需求场景
我的一个新项目要基于 golang gin web 框架。我可能会在多台开发机上同时进行开发,所以就涉及到 golang 项目的开发环境同步问题。 而目前我只会 go get 进行依赖安装,目前只有一个 gin 依赖包还好;但是如果依赖包多了,那岂不是要麻烦死。
golang 是否有像 php composer 和 python pip 这样的包管理功能。
go modules
找了一圈感觉 go 1.11 引入的 modules 满足我的需求。比之前版本的 go dep 方案好太多了。
go dep 不方便的地方
新项目在自己工作目录下,使用 dep 初始化会报错:
$ dep init
init failed: unable to detect the containing GOPATH: /home/zhongwei/work/my_project/go is not within a known GOPATH/src
而我并不希望将新项目的目录 my_project/go 加入到 GOPATH 中。
go modules 的使用方法
初始化:
> go mod init sunzhongwei.com/go
go: creating new go.mod: module sunzhongwei.com/go_tool
> ls
go.mod
> cat go.mod
module sunzhongwei.com/go_tool
go 1.13
新建一个 gin main 文件 main.go
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
执行 go build, 会看到目录下多了两个文件 go.sum 和 go_tool
> ls
go.mod go.sum go_tool* main.go
go.mod 随之更新
> cat go.mod
module sunzhongwei.com/go_tool
go 1.13
require github.com/gin-gonic/gin v1.4.0
go.mod 的作用是什么
从上面的步骤来看,go build 可以自动下载依赖,那还要 go.mod 有什么用?
我觉得类似 composer install 一样,也是第一次更新 go.mod 文件,添加没有的依赖。
之后就会读取 go.mod。
go module 与 package 的区别
A module is a collection of related Go packages that are versioned together as a single unit.
即,module 包含了一堆 packages。版本号是打在 module 上,而不是 package 上。
go.sum 的作用
用来校验下载的依赖包的 hash 值。
参考
- https://blog.golang.org/using-go-modules
- https://github.com/golang/go/wiki/Modules
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式