美文网首页
Go包管理

Go包管理

作者: 泥人冷风 | 来源:发表于2020-12-21 15:01 被阅读0次

    1 Go Modules是什么?

    Go语言通过包管理来封装模块和复用代码,这里我们只介绍Go Modules管理方法
    Go Modules于Go语言1.11版本时引入,在1.12版本正式支持,是由Go语言官方提供的包管理解决方案
    Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性

    2 Go Modules的使用方法

    2.1 环境变量

    首先需要设置环境变量,可以使用go env命令查看当前配置。

    $ go env
    set GO111MODULE=
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\learn\AppData\Local\go-build
    set GOENV=C:\Users\learn\AppData\Roaming\go\env  
    set GOEXE=.exe
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=C:\Users\learn\go\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=C:\Users\learn\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct      
    set GOROOT=c:\go
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=c:\go\pkg\tool\windows_amd64       
    set GCCGO=gccgo
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    

    如果需要更改GO111MODULE,可以使用go env命令

    $ go env -w GO111MODULE=on  
    $ go env
    set GO111MODULE=on
    set GOARCH=amd64
    set GOBIN=
    set GOCACHE=C:\Users\learn\AppData\Local\go-build
    set GOENV=C:\Users\learn\AppData\Roaming\go\env
    set GOEXE=.exe
    set GOFLAGS=
    set GOHOSTARCH=amd64
    set GOHOSTOS=windows
    set GOINSECURE=
    set GOMODCACHE=C:\Users\learn\go\pkg\mod
    set GONOPROXY=
    set GONOSUMDB=
    set GOOS=windows
    set GOPATH=C:\Users\learn\go
    set GOPRIVATE=
    set GOPROXY=https://proxy.golang.org,direct
    set GOROOT=c:\go
    set GOSUMDB=sum.golang.org
    set GOTMPDIR=
    set GOTOOLDIR=c:\go\pkg\tool\windows_amd64
    set GCCGO=gccgo
    set AR=ar
    set CC=gcc
    set CXX=g++
    set CGO_ENABLED=1
    set GOMOD=NUL
    set CGO_CFLAGS=-g -O2
    set CGO_CPPFLAGS=
    set CGO_CXXFLAGS=-g -O2
    set CGO_FFLAGS=-g -O2
    set CGO_LDFLAGS=-g -O2
    set PKG_CONFIG=pkg-config
    set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\learn\AppData\Local\Temp\go-build821940786=/tmp/go-build -gno-record-gcc-switches
    

    GO111MODULE

    • auto:只要项目包含了go.mod文件的话启用Go modules,目前在Go1.11至Go1.14中仍然是默认值。
    • on:启用Go modules,推荐设置,将会是未来版本中的默认值。
    • off:禁用Go modules,不推荐设置。

    GOPROXY
    此环境变量主要用于设计Go Module的代理

    GOSUMDB
    此环境变量用于在拉取模块的时候保证模块版本数据的一致性。

    2.2 初始化模块

    Go Modules的使用方法比较灵活,在目录下包含go.mod文件即可
    首先通过如下命令创建一个新的Module

    go mod init [module name]
    

    然后当前目录会生成go.mod文件,其内容为:

    module ModuleName
    
    go 1.15
    

    例如:

    $ go mod init example.com/hello
    go: creating new go.mod: module example.com/hello
    

    go.mod 文件

    module example.com/hello
    
    go 1.15
    

    Go Modules会自动管理包,如果需要引入依赖,只需要在go.mod下添加以下内容即可(以gorose为例)

    module example.com/hello
    
    go 1.15
    
    require(
        github.com/gohouse/gorose v1.0.5
    )
    

    2.3 go get

    go get 命令用于拉取新的依赖,以下为go get命令具体用法

    go get 拉取依赖,会进行指定行拉取(更新),并不会更新所依赖的其他模块。
    go get -u 更新现有的依赖,会强制更新它所依赖的其他全部模块,不包含自身。
    go get -u -t ./... 更新所有直接依赖和间接依赖的模块版本,包括单元测试中用到的。

    其他参数

    -d 只下载不安装
    -f 只有在你包含了 -u 参数的时候才有效,不让 -u去验证import 中的每一个都已经获取了,这对于本地fork的包特别有用
    -fix 在获取源码之后先运行 fix,然后再去做其他的事情
    -t 同时也下载需要为运行测试所需要的包
    -u 强制使用网络去更新包和它的依赖包
    -v 显示执行的命令
    

    2.4 常用命令

    go mod init //初始化go.mod
    go mod tidy //更新依赖文件
    go mod download //下载依赖文件
    go mod vendor //将依赖转移至本地的vendor 文件
    go mod edit //手动修改依赖文件
    go mod graph //查看现有的依赖结构
    go mod verify //校验依赖
    

    相关文章

      网友评论

          本文标题:Go包管理

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