说一说go mod

作者: xcrossed | 来源:发表于2019-10-19 00:02 被阅读0次

    [toc]

    说一说go mod

    写在前面,我们要切换到go mod吗

    go mod是官方力推的go模块依赖管理的工具,有官方的背书,肯定是要用的。go1.13已经默认支持了,所以迟早要切到go mod, 势不可挡。

    go mod能做什么

    go mod能管理的依赖包的版本,能保证在不同地方构建,获得的依赖模块是一致的。

    没有go mod之前如何管理包依赖

    没有go mod之前,有go deps, vendor等方法来解决。

    go mod如何工作

    • go 1.11通过设置环境变量GO111MODULE来决定是否启用
    export GO111MODULE=off  #关闭go mod
    export GO111MODULE=on   # 开启mod
    export GO111MODULE=auto # GOPATH/src不启用,但是还要看当前目录或者上级目录是否存在go.mod,go.sum,如果存在,则启用go mod
    

    这里面有个坑,就是设置为auto的时候并且在GOPATH/src下,如果该目录或者父目录存在go.mod, go.sum文件,则go mod也是启用的

    • go1.13已经默认开启

    切换到go mod可能遇到的问题

    • go mod download非常慢
    export GOPROXY=https://mirrors.aliyun.com/goproxy/ #设置拉取的代理 
    export GOPROXY=file://本地路径  # 也可以从本地加载
    
    • go mod下载的包不对

    可下面的命令下载指定的版本

    如果发现编译不过,可以通过下面命令列出指定mod的版本,然后go get拉指定版本号的包
    go list -m -versions rsc.io/sampler
    go get rsc.io/sampler@v1.3.1
    

    1.13可以彻底不要GOPATH了

    • go mod 会贯穿go tool工具链,这句话什么意思呢,意思是go test, go vet, go build等工具都会先检查依赖。go mod会自动工作。如果你依赖没有下载好,则会一直卡住。
    
    * go mod init # 初始化当前目录为模块根目录,生成go.mod, go.sum文件
    * go mod download # 下载依赖包
    * go  mod tidy #整理检查依赖,如果缺失包会下载或者引用的不需要的包会删除
    * go mod vendor #复制依赖到vendor目录下面
    * go mod 可看完整所有的命令
    
    

    go mod虽好,但是费开发者的电脑磁盘,go mod拉下的包都会放 当前目录的pkg/mod目录下面, 意味着不同项目引用相同的包会重复下载,不像java的maven本地一个集中的目录,不重复下载。

    更详细的说明可以看官方blog关于go mod的说明
    https://blog.golang.org/using-go-modules

    相关文章

      网友评论

        本文标题:说一说go mod

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