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
│ │ └── go@v0.110.0
│ ├── github.com
│ │ ├── !burnt!sushi
│ │ ├── benbjohnson
│ │ ├── twitchyliquid64
│ │ └── ugorji
│ ├── golang.org
│ │ └── x
│ ├── google.golang.org
│ │ ├── protobuf@v1.30.0
│ │ ├── protobuf@v1.34.1
│ │ └── protobuf@v1.36.2
│ └── rsc.io
│ └── pdf@v0.1.0
└── 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