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
命令执行过程中所使用的所有命令
标记名称 | 标记描述 |
| 让命令程序只执行下载动作, 而不执行安装动作。 |
| 仅在使用 |
| 让命令程序在下载代码包后先执行修正动作, 而后再进行编译和安装。 |
| 允许命令程序使用非安全的 scheme(如 HTTP) 去下载指定的代码包。如果你用的代码仓库 (如公司内部的 Gitlab) 没有 HTTPS 支持, 可以添加此标记。请在确定安全的情况下使用它。 |
| 让命令程序同时下载并安装指定的代码包中的测试源码文件中依赖的代码包。 |
| 让命令利用网络来更新已有代码包及其依赖包。默认情况下, 该命令只会从网络上下载本地不存在的代码包, 而不会更新已有的代码包。 |
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
目录下