Golang 包管理 go mod

GOPATH

golang的包管理有些特别。go是以GOPAT环境变量中的目录去寻找包。相对于java,go并不会在当前目录下去寻找包。
于是,除非将当前工作目录加入到GOPATH环境变量中去,简单的以相对路径导入包是行不通的。传统做法是每次先将当前工作目录加入到GOPATH环境变量中。
例如

import (
	"github.com/my/thing"
)

则必须将"github.com/my/thing"包加入到"GOPATH/github.com/my/thing"目录下。这是比较麻烦的。
有没有更简单的方法呢?在Golang1.1.1版本后,便引入了go mod 包管理工具。

go mod

Module

模块(module)是一组相关go包的集合,被视为版本控制的单元。module中记录着依赖的包和相应的版本。
module 用项目根目录下go.mod 的文件记录。
一个go.mod文件事例:

module github.com/my/thing

require (
    github.com/some/dependency v1.2.3
    github.com/another/dependency/v4 v4.0.0
)

第一行表示项目本身的module路径。即使这个项目并不放在"GOPATH/github.com/my/thing"目录,go仍然能根据go.mod正确导入相应包如github.com/my/thing/somepackage进行编译。

使用go mod

init

最常用的就是go mod init,进入工作目录,使用

go mod init module-name

如:go mod init github.com/my/thing
根目录下就会多了go.mod文件。项目目录下多出一个文件 go.sum 。go.sum 包含所依赖的包的版本的校验和,起校验作用。

tidy

go mod tidy

可以移除go.mod文件中的无用依赖和添加缺失的依赖。

vendor

go mod vendor

此命令会将build阶段需要的所有依赖包放到模块所在的vendor目录中,并且测试所有模块的包。

Reference

  1. Go 1.11 Modules 官方说明文档 https://github.com/golang/go/wiki/Modules
  2. Go module的介绍及使用 https://blog.csdn.net/benben_2015/article/details/82227338

你可能感兴趣的:(Service,Computing)