gomodule详解
基础知识
环境准备
- 使用golang 1.11以上版本的朋友,开启 GO11MODULE=on ,并且确保实验目录不在 GOPATH 中,命令行里执行。
export GO11MODULE=on
export GO111MODULE=on
2.golang 1.12和golang 1.13的朋友,确保实验目录不在 GOPATH 中。
3.加速下载,命令行里执行。
export GOPROXY=https://goproxy.io初始化go module环境
带git的项目
10年积累的成都网站建设、成都做网站经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先制作网站后付款的网站建设流程,更有罗江免费网站建设让你可以放心的选择与我们合作。
- 直接从github上面clone一个项目下来。
- 直接执行 go mod init 会自动生成带git地址的packagename
- 执行命令:
go mod init
不带git的项目
直接执行go mod init packagename
下载依赖包go mod download
拉取必须模块,移除不用的模块go mod tidy
ps: - go get、 go run、go build 也会自动下载依赖
- 如果tag对应内容有更新,需要删除pkg中的缓存内容;直接rm -rf *就可以了。
添加新依赖包三种方式- 直接修改 go.mod 文件,然后执行 go mod download
- 使用 go get packagename@v0.0.0,会自动更新 go.mod 文件的
- go run、go build 也会自动下载依赖
将依赖包下载到vendor目录go mod vendor
功能介绍一
使用replace本地包替换:
基于国内万能的防火墙,就可能会用到这个功能
main.go
main.go
package main
import "packagepath/pkg"
func main() {
pkg.Hello()
}
go mod
module go-mod
require packagepath/pkg v0.0.0
replace packagepath/pkg => ./pkg
replace 可以文件夹,也可以是另外一个package
module go-mod
require packagepath/pkg v0.0.0
replace packagepath/pkg v0.0.0 => github.com/packagepath/pkg v0.0.0
ps:顶层依赖可替换但间接依赖不可替换
功能介绍二 semver—Semantic Versioning
semver 是 语义化版本(Semantic Versioning)规范 的一个实现,目前是由 npm 的团队维护,实现了版本和版本范围的解析、计算、比较。
main.go
package main
import (
"fmt"
v1 "github.com/e421083458/gomodtest_base"
v2 "github.com/e421083458/gomodtest_base/v2"
)
func main(){
v2.NewIntCollection("hello","sex")
v1.NewIntCollection("hello")
fmt.Println("hello");
}
go.mod
module module_test
require (
github.com/e421083458/gomodtest_base v1.0.1
github.com/e421083458/gomodtest_base/v2 v2.0.0
)
总结:
- 一般情况,go mod init 和 go mod tidy 两个命令就够用了。
- 看$GOPATH/pkg/mod里面的文件就知道了,mod做了一件类似maven的事把所有包都打上了版本号;可以说这是 golang 迈向高大上语言的标志。
从此我们不再为多版本使用的困扰,也不再为IDE打开一个新项目后等待n分钟的生成缓存犯愁。推荐大家丢掉vendor使用统一管理。
3.semver 将版本信息绑定进包名对于习惯了传统包管理器方案的用户来说显得有些怪异,可能需要花上一些额外时间适应。
分享文章:gomodule详解
文章网址:http://azwzsj.com/article/iidcgd.html