美文网首页
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语言代码结构

    包 每个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/rtprnktx.html