1. Golang 编译命令行

1.1. go get

“go get” command is the standard way of downloading and installing packages and related dependencies.

  • -v: 打印出细节信息
  • -u: update packages and their dependencies, 强制更新。如果不加这个, get 的内容比本地新的话也不会更新, 直接跳过。
  • -d: If you only want to download the source files, and not compile and install, using “go get -d” command
  • -x: check the detailed workflow by “go get -x”, 加入 -x 标记, 这样可以看到 go get 命令执行过程中所使用的所有命令

标记名称

标记描述

-d

让命令程序只执行下载动作, 而不执行安装动作。

-f

仅在使用 -u 标记时才有效。该标记会让命令程序忽略掉对已下载代码包的导入路径的检查。如果下载并安装的代码包所属的项目是你从别人那里 Fork 过来的, 那么这样做就尤为重要了。

-fix

让命令程序在下载代码包后先执行修正动作, 而后再进行编译和安装。

-insecure

允许命令程序使用非安全的 scheme(如 HTTP) 去下载指定的代码包。如果你用的代码仓库 (如公司内部的 Gitlab) 没有 HTTPS 支持, 可以添加此标记。请在确定安全的情况下使用它。

-t

让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。

-u

让命令利用网络来更新已有代码包及其依赖包。默认情况下, 该命令只会从网络上下载本地不存在的代码包, 而不会更新已有的代码包。

1.2. go build

通过 go build 加上要编译的 Go 源文件名, 我们即可得到一个可执行文件, 默认情况下这个文件的名字为源文件名字去掉 .go 后缀。

$ go build hello.go
$ lshello hello.go

当然我们也可以通过 -o 选项来指定其他名字:

$ go build -o mygo hello.go
$ lsmygo hello.go

如果我们在 go-examples 目录下直接执行 go build 命令, 后面不带文件名, 我们将得到一个与目录名同名的可执行文件:

$ go build
$ lsgo-examples hello.go

1.2.1. go build 不同系统

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。

Mac 下编译 Linux, Windows 平台的 64 位可执行程序:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

Linux 下编译 Mac, Windows 平台的 64 位可执行程序:

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go

Windows 下编译 Mac, Linux 平台的 64 位可执行程序:

SET CGO_ENABLED=0
SET GOOS=darwin3
SET GOARCH=amd64
go build test.go

SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build test.go
  • GOOS: 目标可执行程序运行操作系统, 支持 darwin, freebsd, linux, windows
  • GOARCH: 目标可执行程序操作系统构架, 包括 386, amd64, arm

Golang version 1.5 以前版本在首次交叉编译时还需要配置交叉编译环境:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 ./make.bash
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash

1.3. go install

与 build 命令相比, install 命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。

go install 编译出的可执行文件以其所在目录名 (DIR) 命名

go install 将可执行文件安装到与 src 同级别的 bin 目录下, bin 目录由 go install 自动创建

go install 将可执行文件依赖的各种 package 编译后, 放在与 src 同级别的 pkg 目录下