如何通过Go语言Modules高效管理项目依赖?

2026-04-01 20:591阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2046个文字,预计阅读时间需要9分钟。

如何通过Go语言Modules高效管理项目依赖?

前言:Go modules是Go语言的一个包管理工具,由官方提供,相比较于其他依赖管理工具更加可靠。最适用的Go版本应为1.11及以上。

可以将其理解为Python的虚拟环境,或者Java的Maven,PHP的Composer。其基本解决的问题是包管理混乱。

前言

go moudules是Go的一个包管理工具,官方提供的,还是比较靠谱的,最低Go版本要求1.11+。

可以理解为Python的虚拟环境,或者Java的maven,PHP的composer。

其本质解决的问题就是包管理混乱问题。

反正就是,用就完事了,只有好事,没有坏事。

如何通过Go语言Modules高效管理项目依赖?


配置(不用管)

GO111MODULE=off # 不适用modules功能 GO111MODULE=off #使用molules功能,不会去GOPATH下找依赖包, 1.11+版本默认开启 GO111MODULE=auto:Golang # Golang自己简则是不是使用modules功能

根据上述命令,可以得到结论,在1.11+版本中,默认就是可以使用go modules的,不需要做其他设置。


它和传统的直接go get区别在哪

没有使用go modules时,我们直接go get下载的包,会默认放在%GOPATH%/src目录下。

启用go modules后,包都会下载到%GOPATH%/pkg/mod文件夹中。

并且会带版本号,基本彻底解决依赖问题。


开始使用创建go.mod文件

go.mod文件相当于requirement.txt文件,里面会放一些所需要的依赖包。


开始使用

我创建了一个gomod-demo文件夹。

并且CMD进入此文件夹里面。

执行命令go mod init gomod-demo

后面这个gomod-demo可以随便写,建议和文件夹名字一样。

成功后,文件夹下会多了一个go.mod文件,代表成功。

我用Goland打开这个gomod-demo文件夹。

go.mod文件说明
  1. module:模块名称。

  2. require:依赖包列表以及版本。

  3. exclude:禁止依赖包列表(仅在当前模块为主模块时生效)。

  4. replace:替换依赖包列表(仅在当前模块为主模块时生效)。

当然,这些基本我们不需要动,都是通过命令或者IDE修改的


简单使用

比如我需要使用一个xstrings 包。

github地址:github.com/huandu/xstrings

需要执行此命令安装此包。

执行下载命令。

go.mod文件会自动添加一个依赖包。

代码:

package main import ( "fmt" "github.com/huandu/xstrings" ) func main() { s := "heheh ADSL附近" center := xstrings.Count(s, "h") fmt.Println(center) }

go连接Mysql

github文档如下。

执行下载命令 go get -u github.com/go-sql-driver/mysql

go.mod文件如下。

代码:

package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" "time" ) func main() { //s := "heheh ADSL附近" //center := xstrings.Count(s, "h") //fmt.Println(center) db, err := sql.Open("mysql", "user:password@/dbname") if err != nil { panic(err) } // See "Important settings" section. db.SetConnMaxLifetime(time.Minute * 3) db.SetMaxOpenConns(10) db.SetMaxIdleConns(10) }

可能出现的异常

如果使用go get 第三方包时,goland无法导入,或者报错,或者没有Go Modules

项目目录下,使用go mod download下载一下,基本可以解决问题,只要有Go Modules,就代表没问题。

如果还是没有Go Modules,在Goland中settings->Go->GoModules(vgo)

go mod所有命令

在当前文件夹下初始化一个新的 module,创建 go.mod 文件:go mod init name 拉取缺少的模块,移除不用的模块:go mod tidy 将依赖复制到 vendor 下:go mod vendor 下载依赖:go mod download 检验依赖:go mod verify 显示模块依赖图:go mod graph 解释为什么需要依赖:go mod why 编辑 go.mod 文件:go eidt 查看命令列表:go mod 查看命令帮助文档:go help mod

本文共计2046个文字,预计阅读时间需要9分钟。

如何通过Go语言Modules高效管理项目依赖?

前言:Go modules是Go语言的一个包管理工具,由官方提供,相比较于其他依赖管理工具更加可靠。最适用的Go版本应为1.11及以上。

可以将其理解为Python的虚拟环境,或者Java的Maven,PHP的Composer。其基本解决的问题是包管理混乱。

前言

go moudules是Go的一个包管理工具,官方提供的,还是比较靠谱的,最低Go版本要求1.11+。

可以理解为Python的虚拟环境,或者Java的maven,PHP的composer。

其本质解决的问题就是包管理混乱问题。

反正就是,用就完事了,只有好事,没有坏事。

如何通过Go语言Modules高效管理项目依赖?


配置(不用管)

GO111MODULE=off # 不适用modules功能 GO111MODULE=off #使用molules功能,不会去GOPATH下找依赖包, 1.11+版本默认开启 GO111MODULE=auto:Golang # Golang自己简则是不是使用modules功能

根据上述命令,可以得到结论,在1.11+版本中,默认就是可以使用go modules的,不需要做其他设置。


它和传统的直接go get区别在哪

没有使用go modules时,我们直接go get下载的包,会默认放在%GOPATH%/src目录下。

启用go modules后,包都会下载到%GOPATH%/pkg/mod文件夹中。

并且会带版本号,基本彻底解决依赖问题。


开始使用创建go.mod文件

go.mod文件相当于requirement.txt文件,里面会放一些所需要的依赖包。


开始使用

我创建了一个gomod-demo文件夹。

并且CMD进入此文件夹里面。

执行命令go mod init gomod-demo

后面这个gomod-demo可以随便写,建议和文件夹名字一样。

成功后,文件夹下会多了一个go.mod文件,代表成功。

我用Goland打开这个gomod-demo文件夹。

go.mod文件说明
  1. module:模块名称。

  2. require:依赖包列表以及版本。

  3. exclude:禁止依赖包列表(仅在当前模块为主模块时生效)。

  4. replace:替换依赖包列表(仅在当前模块为主模块时生效)。

当然,这些基本我们不需要动,都是通过命令或者IDE修改的


简单使用

比如我需要使用一个xstrings 包。

github地址:github.com/huandu/xstrings

需要执行此命令安装此包。

执行下载命令。

go.mod文件会自动添加一个依赖包。

代码:

package main import ( "fmt" "github.com/huandu/xstrings" ) func main() { s := "heheh ADSL附近" center := xstrings.Count(s, "h") fmt.Println(center) }

go连接Mysql

github文档如下。

执行下载命令 go get -u github.com/go-sql-driver/mysql

go.mod文件如下。

代码:

package main import ( "database/sql" _ "github.com/go-sql-driver/mysql" "time" ) func main() { //s := "heheh ADSL附近" //center := xstrings.Count(s, "h") //fmt.Println(center) db, err := sql.Open("mysql", "user:password@/dbname") if err != nil { panic(err) } // See "Important settings" section. db.SetConnMaxLifetime(time.Minute * 3) db.SetMaxOpenConns(10) db.SetMaxIdleConns(10) }

可能出现的异常

如果使用go get 第三方包时,goland无法导入,或者报错,或者没有Go Modules

项目目录下,使用go mod download下载一下,基本可以解决问题,只要有Go Modules,就代表没问题。

如果还是没有Go Modules,在Goland中settings->Go->GoModules(vgo)

go mod所有命令

在当前文件夹下初始化一个新的 module,创建 go.mod 文件:go mod init name 拉取缺少的模块,移除不用的模块:go mod tidy 将依赖复制到 vendor 下:go mod vendor 下载依赖:go mod download 检验依赖:go mod verify 显示模块依赖图:go mod graph 解释为什么需要依赖:go mod why 编辑 go.mod 文件:go eidt 查看命令列表:go mod 查看命令帮助文档:go help mod