赞
踩
Go 1.11 版本推出 modules,简称 mod,go mod的推出可以使我们更容易管理项目中所需要的模块。go mod 不再依靠 $GOPATH,使得它可以脱离 GOPATH 来创建项目。也就是你可以在你电脑的任意位置创建一个文件夹作为项目目录,然后使用 go mod 命令对目录进行初始化。
Go Modules 在 Go 1.11 和 Go 1.12 中有三个模式,根据环境变量 GO111MODULE进行配置:
在项目开发中我们可以会用到很多第三方库,由于有很多库在境外网站访问非常慢或需要翻墙,从而导致下载失败,在Go 1.13及以后版本我们可以通过设置环境变量GOPRIVATE来控制代理从而方便下载第三方库
# 设置GOPROXY代理 go env -w GOPROXY=https://goproxy.cn,direct https://goproxy.cn 为代理地址 direct 为特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取, 也就是说在proxy找不到的时候,会直接访问模块源码所在的地址 比如github #设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔: go env -w GOPRIVATE=*.gitlab.com,*.gitee.com 常用代理 阿里云 https://mirrors.aliyun.com/goproxy/ nexus社区 https://gonexus.dev 七牛云 https://goproxy.cn goproxy.io https://goproxy.io
在非$GOPATH目录的任意地方创建一个文件夹,然后再终端执行 go mod init project_name进行初始化操作,成功之后会发现目录下会生产一个go.mod文件
查看go.mod内容:
module modtest
go 1.19
在demo01目录下创建 main.go文件,并引入gin库,启动一个web服务,代码如下
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 run main.go 运行代码会发现 go mod 会自动查找依赖自动下载,再查看 go.mod
module modtest
go 1.19
require github.com/gin-gonic/gin v1.9.1
go module 安装 package 的原則是先拉最新的 release tag,若无tag则拉最新的commit
go 会自动生成一个 go.sum 文件来记录 dependency tree
再次执行脚本 go run main.go发现跳过了检查并安装依赖的步骤。
可以使用命令 go list -m -u all 来检查可以升级的package,使用go get -u need-upgrade-package 升级后会将新的依赖版本更新到go.mod * 也可以使用 go get -u 升级所有依赖
上面截图中的 indirect 表示这个包是间接引用进来的
命令 | 说明 |
---|---|
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(拉u缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content(验证依赖是否正确) |
why | explain why packages or modules are needed(解释为什么需要依赖) |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。