内容
1 gvm管理go版本
2 git submodule
3 go mod
gvm使用
1 安装gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
2 gvm管理go 版本
前言:使用gvm可以方便的切换各个go版本,在使用go mod之前,项目的依赖的第三方包是房子GOPATH的pkg目录下的,gvm不同的版本所管理的gopath是不一样的,所以切换版本后,path也相应切换
1 gvm listall // 查看所有的go版本
2 gvm install go1.14 // 安装go1.14版本
3 gvm list // 查看当前使用的go version
go1.12.9
=> go1.14 //当前使用1.14
system
4 gvm use go1.12.9 // 切换到使用1.12版本
Now using version go1.12.9
3 gvm管理项目依赖的第三方包
gvm pkgset list //查看当前版本使用的包路径, 当前版本使用的默认global包
gvm go package sets (system)
=> global
$ echo $GOPATH
/Users/genewfli/.gvm/pkgsets/system/global
gvm pkgset create mypkg // 建立一个自己的mypkg,每个项目一个对应的pkgset
gvm pkgset use mypkg // 当前版本使用mypkg这个路径充当gopath, 这个样就完成了项目依赖的第三方存储路径的隔离,不同项目使用不同pkgset来存储第三方依赖包
gvm pkgenv mypkg // 查看当前pkg的go env 配置 注意:注意idea里的设置的gopath不一样的话,通过idea go get的包的路径要注意一下,可能就不是在pkgenv 里的go path 里了
git submodule
1 项目中通过submodule添加一个子项目依赖
git submodule add https://github.com/B.git usr/plugins/BaiduSubmit
格式:git submodule 子项目url 子项目在父项目的地址
2 克隆一个有子项目的项目
git clone xxx.git // git clone父项目后还需要初始化submodule
# 初始化子模块
git submodule init
# 将子模块的文件check出来
git submodule update
3 修改子项目并提交子项目
# 首先,我们进入子模块
cd xx/xx/sub
# 检出master分支「子项目是游离状态,进入后需要checkout到想要提交分支」
git checkout master
# 然后做修改
vim some-file.py
# 最后做提交
git add .
git commit -m "Get something done"
git push origin master
4 别人更新了submodule项目,想要把别人的变更更新到父项目
# 首先,我们进入子模块
cd xx/xx/sub
# 检出master分支
git checkout master
# 然后拉取更新
git pull
# 回到父项目中更新
cd ../../
git add xx/xx/xx
git commit -m "update submodule"
5 如何将submodule的变更在父项目中提交
// 子项目被提交后,在父项目中会感应到
git status
# modified: xx/xxxx/xxxx (new commits)
# add的时候注意再最后不要加 / 斜杠,否则会出现很棘手问题
git add xx/xxxx/xxxx
git commit -m "update submodule"
git push
详细参考:https://blog.phpgao.com/git_submodule.html
go mod
1 前言
go mod是go 12版本正式推出的管理依赖包的新特性,到13版后已经默认启动go mod了,取代了以前去go path下面寻找依赖的方式,让项目之间依赖隔离管理更方便
2 go mod 命令和关键参数
2.1 关键参数
GO111MODULE
GO111MODULE =auto/on/off, GO111MODULE有三个可选值
auto
go < 1.13
当前目录或父辈目录有 go.mod 文件,且目录在 $GOPATH/src 外:才使用 module 模式
go >= 1.13
当前目录或父辈目录有 go.mod 文件,即使目录在 $GOPATH/src 内:都使用 module 模式
on: 不管什么时候,都使用 module 模式
off: 不管什么时候,都不使用 module 模式
GOPROXY
用途:提供代理获取 Golang 模块源码的功能。
默认值:`proxy.golang.org,direct` ([参考](https://github.com/golang/go/blob/master/src/cmd/go/internal/cfg/cfg.go#L248))
格式([参考](https://github.com/golang/go/blob/master/src/cmd/go/internal/modfetch/proxy.go#L113)):`<proxyURL01>,<proxyURL02>,direct` 或 [off](https://golang.org/doc/go1.13#modules)
允许以英文逗号 `,` 分隔设置多个代理地址,多个地址中,优先从第 1 个代理开始获取模块源码,若失败则尝试后面的地址
`direct`:表示不使用代理,直接从源码仓库获取
`proxy.golang.org,direct`:表示优先从 `proxy.golang.org` 获取,若失败,则直接从源码仓库获取(`direct`)
`off`:表示一开始就不从任何代理下载模块,只从模块本身源码网站下载
第三方可用代理:
[官方:proxy.golang.org](http://km.oa.com/group/19253/articles/show/402096#%E5%AE%98%E6%96%B9-proxy-golang-org)
[七牛云:goproxy.cn](http://km.oa.com/group/19253/articles/show/402096#%E4%B8%83%E7%89%9B%E4%BA%91-goproxy-cn)
[腾讯云:mirrors.tencent.com/go](http://km.oa.com/group/19253/articles/show/402096#%E8%85%BE%E8%AE%AF%E4%BA%91-mirrors-tencent-com-go)
[阿里云:mirrors.aliyun.com/goproxy](http://km.oa.com/group/19253/articles/show/402096#%E9%98%BF%E9%87%8C%E4%BA%91-mirrors-aliyun-com-goproxy)
[百度:goproxy.baidu.com](http://km.oa.com/group/19253/articles/show/402096#%E7%99%BE%E5%BA%A6-goproxy-baidu-com)
GOSUMDB
GOPRIVATE
2.2 go mod 命令
go mod download: download modules to local cache(下载依赖包)
go mod edit: edit go.mod from tools or scripts(编辑go.mod
go mod graph: print module requirement graph (打印模块依赖图)
go mod init: initialize new module in current directory(在当前目录初始化mod)
go mod tidy: add missing and remove unused modules(拉取缺少的模块,移除不用的模块)
go mod vendor: make vendored copy of dependencies(将依赖复制到vendor下)
go mod verify: verify dependencies have expected content (验证依赖是否正确)
go mod why: explain why packages or modules are needed(解释为什么需要依赖)
网友评论