golang的最新项目管理推荐采用module模式。

一、go mod命令使用详解

1.golang版本 go的module管理模式在golang 1.11版本后才能够使用。

2.环境变量的设置 要使用golang的module项目管理模式,需要设置对应的环境变量GO111MODULE的值,该变量有三种类型,如下:

1)GO111MODULE=auto 此为默认值,在此模式下,如果代码在gopath下,则自动使用gopath模式;如果代码不在gopath下,则自动使用GO mod模式。这种情况下可以分为两种情形:

(1)当前目录在GOPATH/src之外且该目录包含go.mod文件

(2)当前文件在包含go.mod文件的目录下面。

2)GO111MODULE=on 此模式下,项目不再使用GOPATH,直接采用module模式管理项目,go命令行会使用modules,而一点也不会去GOPATH目录下查找。

3)GO111MODULE=off 此模式下,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。。

3.各命令的使用

go mod download //下载依赖包 
go mod edit //edit go.mod from tools or scripts 编辑go.mod 
go mod graph //打印模块依赖图
go mod init //initialize new module in current directory 在当前目录初始化mod
go mod tidy //拉取缺少的模块,移除不用的模块。
go mod vendor //将依赖复制到vendor下
go mod verify //verify dependencies have expected content 验证依赖是否正确
go mod why //解释为什么需要依赖

二、module的目录结构

projectName
|---main.go
|---mypack1
         |---a.go
         |---b.go
|---mypack2
         |---c.go
         |---d.go
|---go.mod
|---go.sum
|---vendor
         |---github.com/...
         |---golang.org/...

注意,利用go mod init命令初始化时的module名字要与main.go中引入时的一致。例如:

go mod init projectName

则在main.go中要如此引用:

package main

import (
    "projectName/mypack1"
    "projectName/mypack2"
)

func main() {
...