golang Modules 依赖管理工具使用

Modules是什么

Golang从诞生之初就一直有个被诟病的问题:缺少一个行之有效的“官方”包依赖管理工具。其原因是在Google内部,所有人都是在一个代码库上进行开发的,因此并不是非常需要。但Golang变成一个社区化的工程语言之后,这个问题被放大了。

  1. GOPATH不符合一般开发者习惯,大部分人更习惯maven、node modules、Nuget之类的包管理方式
  2. GOPATH无法有效的管理版本依赖,没有一个地方能够表明依赖包的具体版本号,无法形成有效的版本配套关系

在Golang 1.5发布了vendor特性之后,社区在vendor基础上开发了很多包管理工具,例如glide, dep(这个最悲催,已经半官方了,结果横刀杀出来一个go mod),等等,具体参见拙文go依赖包管理工具对比 。但说实话,都不是非常满意。 

而Golang 1.11 版本引入的 go mod ,其思想类似maven:摒弃vendor和GOPATH,拥抱本地库。我们今天就来尝试使用该种方式来进行本地包管理。

为了简化操作我们使用goland来进行详细操作:

不使用modules流程:

package main

import (
	"github.com/gogf/gf/g/encoding/gjson"
)

func main() {

}


func GetText(data string) string {
	if j, err := gjson.DecodeToJson([]byte(data)); err != nil {
		panic("Get Text Error")
	} else {
		var result = j.GetString("results.0.values.text")
		return result
	}
}

默认使用 /home/go 作为GOPATH 的下载地址并引用

golang Modules 依赖管理工具使用_第1张图片

 我们这里打开Modules设置:

golang Modules 依赖管理工具使用_第2张图片

golang Modules 依赖管理工具使用_第3张图片

Create go.mod file 点击后生成 go.mod文件跟命令是一样的效果:

​​​​​go mod init [你的项目名]

新创建文件内容如下:
module "demo"

之后在需要引用的包下面 option+空格

golang Modules 依赖管理工具使用_第4张图片

 

golang Modules 依赖管理工具使用_第5张图片

从原来的GOPATH变更为Gi Modules

golang Modules 依赖管理工具使用_第6张图片

go.mod文件:

module demo

go 1.12

require github.com/gogf/gf v1.6.9

生成go.sum:

github.com/gogf/gf v1.6.9 h1:23jjC/oY1E1BNVMZ8wB1jkA3tT2BEtwdf/lHwxB2yjI=
github.com/gogf/gf v1.6.9/go.mod h1:qJRcq0s3RskjJIZKsSHjZkpxw91rd0EAh+4CUbawbXQ=

go.sum是一个模块版本内容的校验值,用来验证当前缓存的模块。go.sum包含了直接依赖和间接依赖的包的信息,比go.mod要多一些。 

依赖包下载位置 

 禁用GOPATH:

golang Modules 依赖管理工具使用_第7张图片

设置构建选项:

golang Modules 依赖管理工具使用_第8张图片

 当然以上全部都是最基本的使用方法,如果想了解更多细节请查看官方文档:

https://github.com/golang/go/wiki/Modules

https://blog.jetbrains.com/go/2019/01/22/working-with-go-modules/

https://arslan.io/2018/08/26/using-go-modules-with-vendor-support-on-travis-ci/

 

你可能感兴趣的:(golang,工具使用,Golang)