Go Modules 学习笔记

Go Modules

go modules是 golang 1.11引入的新特性。模块是相关Go包的集合。modules是源代码交换和版本控制的单元。go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。

GO111MODULE

golang 1.11还引入了一个名为的新env

  • GO111MODULE=off 时,go get 将以旧方式运行,它将下载 $GOPATH/src 文件夹中的依赖项
  • GO111MODULE=on 时,go get 将以新的方式运行,所有模块都将下载到带有版本控制的 $GOPATH/pkg/mod/cache 文件夹中。
  • 当 GO111MODULE=auto 时,则在 $GOPATH/src 文件夹之外运行 go get 时,将表现为 GO111MODULE=on,在 $GOPATH/src 文件夹中运行 go get 时,它的行为就像 GO111MODULE=off

由于中国政府的网络监管系统,Go 生态系统中有着许多中国 Gopher 们无法获取的模块,比如最著名的 golang.org/x/…。并且在中国大陆从 GitHub 获取模块的速度也有点慢。因此需要配置GOPROXY来加速Module依赖下载,这里使用goproxy.cn代理,详细介绍:传送门
注: 推荐将 GO111MODULE 设置为on 而不是auto
Go 1.13及以上版本
go env -w GOPROXY=https://goproxy.cn,direct
Go 1.13以下的版本
export GOPROXY=https://goproxy.cn

模块创建

在$GOPATH/src下创建test目录,mod 初始化项目

cd $GOPATH/src
mkdir test
cd test
go mod init test

init 命令会创建go.mod 文件

module test  // 模块名称

go 1.14  // 创建modules go 版本

现在已经初始化一个新模块,但是还没有任何代码,创建main.go文件

touch main.go
vi main.go

写入

package main

import (
	"fmt"
	"strings"

	"github.com/pborman/uuid"
)

func main() {
	uuidWithHyphen := uuid.NewRandom()
	uuid := strings.Replace(uuidWithHyphen.String(), "-", "", -1)
	fmt.Println(uuid)
}

加载项目依赖并运行项目

go mod tidy
go run main.go

常用命令说明


go mod 命令

The commands are:
download download modules to local cache (下载依赖的module到本地cache))
edit edit go.mod from tools or scripts (编辑go.mod文件)
graph print module requirement graph (打印模块依赖图))
init initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))
tidy add missing and remove unused modules (做两件事1.增加所有依赖,2.去掉未用的module)
vendor make vendored copy of dependencies (生成vendor目录并将依赖复制到vendor下)
verify verify dependencies have expected content (校验依赖)
why explain why packages or modules are needed (解释为什么需要依赖)


项目中引入依赖

  • 直接在go.mod文件添加依赖
module test

go 1.14

require github.com/pborman/uuid v1.2.1	

我们通过以下命令来下载依赖

go mod down
  • 通过go get
export GO111MODULE=on
go get github.com/pborman/uuid
  • 在源码中添加对应依赖,最后go mod tidy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值