美文网首页Golang
关于go module的使用

关于go module的使用

作者: 神奇的考拉 | 来源:发表于2019-12-26 11:44 被阅读0次

    在go1.11版本以后go modules成为了go官方的依赖管理方式,替换一起的Godep。使用go modules管理依赖后会在当前的项目根目录下生成go.mod和go.sum.

    • go.mod

      在其中记录当前的项目的所有依赖,文件格式如下:

      module go-demos
      
      go 1.13
      
      require github.com/x-mod/routine v1.2.7
      

      module go-demos
      
      go 1.13
      
      require (
            github.com/x-mod/routine v1.2.7
      )
      replace (  // 针对有些被墙不能下载 可以替换成其他依赖包
          golang.org/x/text v0.3.0 => github.com/golang/text v0.3.0
      )
      
    • go.sum

      在其中记录每个依赖库的版本和哈希值,文件格式如下:

      cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
      github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
      github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
      

    一.启用go modules

    1.1 要求

    (1)go版本 >= 1.11 (1.11才添加的)

    (2)设置GO111MODULE环境变量设置:

    ​ GO111MODULE用来开启go module。其有三个值:off/on/auto; off关闭go module,on开启go moudle,而auto则会根据当前工程project目录下是否有go.mod文件来判断是否使用modules功能。需要指出的无论go module处于哪种模式下,module功能都不会在GOPATH指定目录下查找依赖文件,故而尽量设置代理GOPROXY变量来保证使用go module能够确保依赖下载到。

    ​ 还有一点需要指出的,使用go module时,尽量手动设置GO111MODULE全局环境变量值为off,主要是为了兼容以前未使用go module项目引入go module。

    echo export GO111MODULE=off >> ~/.bash_profile
    或
    直接在文件中手动设定
    

    go mod命令:详情见go modules

    download    下载依赖的module到本地cache
    edit        编辑go.mod文件
    graph       打印模块依赖图
    init        在当前文件夹下初始化一个新的module, 创建go.mod文件
    tidy        增加丢失的module,去掉未使用的module
    vendor      将依赖复制到vendor下
    verify      校验依赖
    why         解释为什么需要依赖
    
    二. 使用module

    2.1 新建项目

    $ export GO111MODULE=on
    $ go mod init project目录(TestPro/github.com/XXX/TestPro)
    ......
    $ go build //此时会将当前项目引用的依赖包括其依赖的依赖也会添加到go.mod中
    

    2.2 已存在项目

    $ export GO111MODULE=on
    $ go mod init // 在当前project根目录下创建一个空的go.mod
    $ go get 依赖  // 将当前项目中使用的依赖添加到go.mod中
    

    需注意一点:go.mod是需要提交到代码仓库中的,而go.sum文件并不需要。

    三. 打包

    需要对前面已增加go module打包进行发布,此时要将当前项目需要的依赖下载到本地vendor目录。

    ### 指定打包生成的目标平台
    export GO111MODULE="on" # 开启go module
    export GOPROXY="https://mirrors.aliyun.com/goproxy/"#指定GOPROXY下载对应的依赖也可用replace替换
    export CGO_ENABLED="0"  # 使用cgo
    export GOOS="linux"     # 目标平台
    export GOARCH=amd64     # 系统架构
    
    go mod vendor  # 依赖下载到vendor目录
    go build       # 构建
    或
    go build -ldflags "-s -w" -a -installsuffix cgo -o audit-webhook .
    

    至此基本的go module已完成。

    还有一些需要注意点:go module默认是不会在GOPATH下查找依赖文件的,其会在GOPATH/pkg/mod下查找有没有存在对应的依赖,没有则进行下载。也可以使用go mod download下载所需的依赖,默认会将依赖下载到GOPATH/pkg/mod下,这样其他的module就可以使用已缓存在本地的依赖。

    四. 引用

    官方modules

    使用modules

    跳出Go module的泥潭

    Go Modules详解

    相关文章

      网友评论

        本文标题:关于go module的使用

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