文章主要是针对新人来介绍go mod是啥以及新手如何使用,老手不用看。现阶段go mod已经完全GA了,你会用了的话会非常方便

requirement.txtpackages.json
vendor
$ tree -d -L 1
.
├── cert
├── cmd
├── docs
├── install
├── ipvs
├── net
├── pkg
├── test
├── vendor
└── version

go是一个开放的态度下诞生的语言,并没有其他语言那样官方维护一个中心库,go的库大多数都是直接github上的。

go.modgo.sum
go mod downloadgo rungo build

go mod如何使用

基础配置和相关环境变量

GO111MODULE=onauto
api/
docker/
models/
router/
service/
docs/
Dockerfile
go.mod
go.sum
main.go
README.md
go getGOPROXY
GOPROXY
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,https://mirrors.aliyun.com/goproxy/,https://goproxy.io,direct
GONOPROXY

同时,也不要像以前以及网上的那些老视频教程那样把项目放在GOPATH上,现在GOPATH的概念越来越淡化了,不懂go mod下如果还是把项目创建在GOPATH下回容易出错。

src pkg bin

终端编译或者run

配置了两个环境变量,项目也是go mod的话我们直接go run main.go或者build都会自动拉取包,不用担心墙

gomod和vendor共存

现在并不是所有用户都接受gomod,很多开源项目为了兼容新老用户,go mod和vendor都是有的,类似目录

...
vendor/
go.mod
go.sum
main.go

这样的项目我们编译的时候命令为

go build -mod vendor main.go

goland下的使用

GOPATH

goland新建gomod开局项目

New ProjectGo Modules(vgo)ProxyGOPROXYVendoring mode

goland打开一个项目,或者改造一个项目

New ProjectGo Modules(vgo)Go
SettingsGOGOPATHSettingsGOGo Modules(vgo)Enable Go Modules(vgo) integration

我们也可以终端操作

1.13 go mod init的话默认会以项目文件夹名为module名,例如下面

F:\go\Installer>go mod init
go: creating new go.mod: module Installer

执行后go.mod第一行为

module Installer

假如我们项目路径为

.
|-- api
|   |-- ks.go
|   `-- machine.go
|-- go.mod
|-- go.sum
|-- main.go

我们要在main.go里引用api包的话就写

import "Installer/api"

第一个就是go.mod里第一行的module名,不仅限于一个单词,有的人会以公司网站或者github地址,例如

module github.com/zhangguanzhang/Installer

这种名字下我们引用api就是

import "github.com/zhangguanzhang/Installer/api"
go mod init
$ go mod init
go: cannot determine module path for source directory F:\go\test (outside GOPATH, module path must be specified)

Example usage:
        'go mod init example.com/m' to initialize a v0 or v1 module
        'go mod init example.com/m/v2' to initialize a v2 module

Run 'go help mod init' for more information.
go mod init.idea