文章主要是针对新人来介绍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