Skip to content

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

Released under the MIT License.