golang 依赖包的版本管理

更新日期: 2019-10-15 阅读次数: 2592 字数: 495 分类: golang

现实需求场景

我的一个新项目要基于 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
领取618阿里云/腾讯云服务器优惠券

关于作者

我是来自山东烟台的一名开发者,喜欢瞎折腾,顺便记记笔记。有敢兴趣的话题,欢迎加微信 zhongwei 聊聊。 白天写程序,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2020年06月05日 世界环境日
2020年06月05日 芒种
2020年06月06日 全国爱眼日
2020年06月11日 中国人口日
2020年06月20日 世界难民日
2020年06月21日 父亲节
2020年06月21日 夏至
2020年06月22日 中国儿童慈善活动日
2020年06月23日 国际奥林匹克日
2020年06月25日 全国土地日
2020年06月25日 端午节
2020年06月26日 国际禁毒日
查看更多节日