美文网首页
go包管理

go包管理

作者: chase_lwf | 来源:发表于2020-08-09 10:46 被阅读0次

内容

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(解释为什么需要依赖)

相关文章

  • Go语言代码结构

    包 每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。GO语言中是通过包来对代码进行管理...

  • go http 包练习

    参见:下载包 设置代理妈的,下载包有时能下,有时候就卡住。手动安装包使用 go module 管理包 go-mod...

  • go modules详解

    go modules详解 [TOC] go1.11开始,支持使用go modules管理依赖包. 刚加入的适合尝试...

  • 你离告别GOPATH只差一步

    使用go mod 管理包代替gopath管理 我使用的编辑器是 goland,下面开始goland的go mod设...

  • 【Go语言基础1】运行命令

    1 第一个go程序 写go程序的注意事项: go语言以包作为管理单位 go程序最开始应该声明包 每个程序都必须有一...

  • 理解Go语言包(package)

    1. Go语言包的概念 Go语言使用包来组织源代码的,并实现命名空间的管理,任何一个Go语言程序必须属于一个包,即...

  • Go Get 访问私有库配置

    go module是go语言官方的包管理方式,go get则是获取包的命令,通常,我们可以使用go get git...

  • go-包引用

    最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理)。 和其他大多数语言一样,Go也存在包,并使用p...

  • go get

    命令 go get命令会借助代码管理工具从远程拉取或更新代码包及其依赖包,并自动完成编译和安装。 go get命令...

  • Go语言版本控制及包依赖管理

    传统Go构建以及包依赖管理 Go在构建设计方面深受Google内部开发实践的影响,比如go get的设计就深受 G...

网友评论

      本文标题:go包管理

      本文链接:https://www.haomeiwen.com/subject/oppqdktx.html