实际项目总要依赖各种第三发开发包,各类开发语言都有自己的第三方包依赖管理工具,例如:java的maven、js的npm、php的composer等,golang在1.11版本以前官方是没有提供包依赖管理工具的,只有一些社区提供的工具,从1.11版本以后官方就提供mod模块管理工具。
下面介绍如何使用go mod管理第三方依赖包
目前最新的go语言版本是1.16, 如果你是最新的版本可以不用重新安装。
提示:如果你的go版本是1.11-1.13这些老版本,需要通过下面配置开启模块管理功能,新版本可以直接跳过这个章节。
通过环境变量GO111MODULE设置是否开启模块管理,GO111MODULE有三种值:
linux/macos设置环境变量:
修改/.bash_profile或者/.bashrc文件,添加下面配置
export GO111MODULE=on
使用module模块管理功能,我们就可以把项目放在任何目录。
切换到项目根目录,执行下面命令。
命令说明:
go mod init 项目名
项目名,建议使用域名作为前缀,例如: xj.com/blog
说明:使用域名作为包前缀可以确保全球唯一,如果你开发的包需要开源给其他人使用,可以避免冲突。
例子:
// 创建项目目录
mkdir blog
// 切换到blog
cd blog
// 初始化模块
go mod init xj.com/blog
初始化模块后,会在当前目录生成一个go.mod文件,这个文件记录了当前项目依赖的第三方包。
go.mod文件内容如下,目前因为还没安装依赖包,所以没有依赖包信息。
module xj.com/blog
go 1.16
提示:go.mod文件需要提交到git仓库中,方便其他开发自动安装依赖包。
经过上面步骤初始化之后,执行下面命令,会自动分析源码中的依赖包,安装缺少的依赖包。
例子:
// 自动分析源码中的依赖,安装依赖包
go mod tidy
// 在项目根目录安装依赖包,会自动将依赖信息写入go.mod
go get github.com/jinzhu/gorm
// 运行程序
go run main.go
// 构建项目
go build
当执行上面任何命令之后,如果你打开go.mod文件,会发现多了一些依赖包的信息。
例子:
文件名:main.go
package main
import (
"net/http"
"github.com/labstack/echo"
)
func main() {
e := echo.New()
e.GET("/", func(c echo.Context) error {
return c.String(http.StatusOK, "Hello, World!")
})
e.Logger.Fatal(e.Start(":1323"))
}
运行程序
// 自动分析源码中的依赖,安装依赖包
go mod tidy
// 执行
go run main.go
打开go.mod文件,内容类似下面:
module xj.com/blog
go 1.16
require (
github.com/labstack/echo v3.3.10+incompatible // indirect
github.com/labstack/gommon v0.3.0 // indirect
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc // indirect
)
只要在项目目录,执行go get命令安装第三方包,会自动更新go.mod文件,将依赖信息添加进去,因此我们只要将go.mod提交到代码仓库中,其他开发者只要更新代码,运行程序,就会自动下载缺少的依赖包。
默认情况下,Go语言安装的第三方依赖包,是安装在GOPATH/src目录下面,不是安装在项目目录中,go编译器也会到GOPATH目录中查找安装包。
go语言也支持将第三方依赖包安装到项目目录中,这个目录就是vendor,如果项目的根目录下面存在vendor目录,编译器优先到vendor目录中查找依赖包。
下面是go module的命令,可以一键创建vendor目录,将依赖包复制进去。
// 在项目根目录执行
go mod vendor
命令执行成功后,项目根目录多了一个vendor目录,里面包含我们项目依赖的所有第三方包。
参考:https://www.tizi365.com/
Go两周入门系列
小伙伴在平常有没有遇到以下这种情况:遇到技术难题时,网上教程一堆堆,优秀的很多,但也有很多是过时的,或者是copy来copy去,甚至错别字都没改。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有