Go 的包管理机制
go module 是 Go 语言的官方的包管理工具,可以理解为前端的 npm,用于管理 Go 项目的依赖关系。
在这之前,还有 godep、vendor 等包管理工具,现在已经不推荐使用了
初始化模块
使用 go mod init
命令初始化模块,类似 npm init -y
的作用,会在当前目录下生成一个 go.mod
文件
$ mkdir my-project
$ cd my-project
$ go mod init my-project
添加依赖
类似于 npm install
的作用,会自动下载依赖,并更新 go.mod
文件
$ go get github.com/gin-gonic/gin
依赖升级
使用 go get -u
命令,可以升级依赖,类似 npm update
的作用
$ go get -u github.com/gin-gonic/gin
依赖删除
使用 go mod tidy
命令,可以删除不再使用的依赖
$ go mod tidy
依赖的位置
通过查看 GOPATH
环境变量,可以知道依赖的位置,位于 Home 目录下的 go 目录下
$ go env GOPATH
/Users/peterroe/go
我们使用 tree 命令查看里面的结构
$ cd $(go env GOPATH)
$ tree -L 3
在我的设备上输出了如下结构:
├── bin
│ ├── gopls
│ ├── httpstat
│ ├── nunu
│ ├── staticcheck
│ └── wire
└── pkg
├── mod
│ ├── cache
│ │ ├── download
│ │ └── lock
│ ├── cloud.google.com
│ │ ├── go
│ │ └── [email protected]
│ ├── github.com
│ │ ├── !burnt!sushi
│ │ ├── benbjohnson
│ │ ├── twitchyliquid64
│ │ └── ugorji
│ ├── golang.org
│ │ └── x
│ ├── google.golang.org
│ │ ├── [email protected]
│ │ ├── [email protected]
│ │ └── [email protected]
│ └── rsc.io
│ └── [email protected]
└── sumdb
└── sum.golang.org
└── latest
所有通过 go get
下载的依赖,都会放在 pkg/mod
目录下,通过域名顶层区分,其下的如果有相同名字的依赖包,会带有版本号进行区分,这样就允许在本地存在同一个包的多个不同版本
二进制模块安装
go get
命令仅仅是下载源码包到 pkg/mod
目录下
有时候,我们可能需要使用对应源码编译出来的二进制包,这时候可以使用 go install
命令,这个命令除了下载源码包,还会编译源码(默认是 main.go 文件作为编译的入口),并生成二进制包,然后放到到 $GOPATH/bin
目录下
$ go install github.com/davecheney/httpstat@latest
执行完命令后,会自动编译源码,并生成二进制包,然后安装到 bin
目录下,我们就可以在任意目录下使用这个二进制包了(当前,要确保 $GOPATH/bin
目录在 PATH 环境变量中)
$ httpstat https://www.google.com