Go Modules 介绍

Modules是Go 1.11中新增的实验性功能,基于vgo演变而来,是一个新型的包管理工具。

Go 1.11 之前的包管理工具都是基于PATH或者vendor目录,并不能很好的解决不同版本依赖问题。Modules是在GOPATH之外一套新的包管理方式。使用Modules可以完全不依赖GOPATH。

注意:Go Modules 需要Go 1.11以上版本

使用指南

Example

1、在GOPATH之外创建一个目录

$ mkdir -p /tmp/scratchpad/hello$ cd /tmp/scratchpad/hello

2、初始化Module

$ go mod init github.com/you/hellogo: creating new go.mod: module github.com/you/hello

3、编辑hello.go

package mainimport (    "fmt"    "rsc.io/quote")func main() {    fmt.Println(quote.Hello())}

4、编译并运行

$ go build$ ./helloHello, world.

注意: go build 会自动下载依赖包,而golang.org/x/...之类的包需要翻墙,可以添加GOPROXY环境变量设置代理:

export GOPROXY=https://goproxy.io

此时,go.mod文件会自动更新,它包含项目所需的依赖项和对应版本号

$ cat go.modmodule github.com/you/hellorequire rsc.io/quote v1.5.2

除了go.mod之外,go还维护一个名为go.sum的文件,其中包含特定模块版本的预期哈希值:

cat go.sumgolang.org/x/text v0.0.0-20170915032832-14c0d48ead0c h1:qgOY6WgZOaTkIIMiVjBQcw93ERBE4m30iBm00nkL0i8=golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=rsc.io/quote v1.5.2 h1:w5fcysjrx7yqtD/aO+QwRjYZOKnaM9Uh2b40tElTs3Y=rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0=rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

go使用go.sum文件确保这些模块的未来下载与第一次下载相同,以此确保项目所依赖的模块不会出现意外更改。
go.mod和go.sum都应检入版本控制。

日常WorkFlow

典型的日常工作流程可能是:

根据需要在.go代码中添加import语句

标准命令(如go build或go test)会根据需要自动添加新的依赖项(更新go.mod并下载新的依赖项)

需要特定版本的时候,可以使用go get指定特定版本如go get foo@v1.2.3, go get foo@master, go get foo@e3702bed2,或者直接编辑go.mod文件

常用的命令:

go list -m all 查看项目中所有直接和间接依赖关系

go mod tidy 清除未使用的依赖项,并添加其他所需依赖项

go mod vendor 将依赖复制到vendor目录下

更多go语言知识请关注PHP中文网go语言教程栏目。

更多相关文章

  1. golang如何获取目录下文件是否存在
  2. 使用GVM管理Go版本的方法介绍
  3. golang读写文件的几种方法
  4. Golang判断文件是否能写入的方法
  5. golang如何读取文件是否存在
  6. golang读取文件是否存在
  7. golang判断是文件还是文件夹
  8. golang如何读取文件
  9. golang如何删除文件?

随机推荐

  1. Android通知栏消息(基本文字通知)
  2. Android中获取屏幕的宽和高
  3. MTK Android Driver :camera
  4. Windows下Android开发环境配置的一种方法
  5. API指南----application
  6. ”数独“android小游戏
  7. content provider 深入解析
  8. Android获取本机信息(随时更新)
  9. 隐藏android中EditText的下划线
  10. android 学习笔记(二)