go语言学习笔记 — 基础 — go工具:编译 —— go build
Posted Locutus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 基础 — go工具:编译 —— go build相关的知识,希望对你有一定的参考价值。
go语言的编译不像C++一样配置各种包含路径、链接库地址。
1. go build (无参数编译)
如果源码中没有GOPATH的包依赖,则可以使用无参数编译go源码。go build会搜索当前目录下的go源文件,编译,然后在当前目录下,生成当前目录名(包名)的可执行文件。
代码结构
main.go
package main
import "fmt"
func main() {
pkgFunc() // 同包的函数
fmt.Println("hello world!")
}
lib.go
package main
import "fmt"
func pkgFunc() {
fmt.Println("call pkgFunc")
}
编译
# cd /path/to/gobuildcode
# go build
# ls
gobuild main.go lib.go
# ./gobild
call pkgFunc
hello world!
2. go build go源文件列表
在同一个目录下,go build之后可以跟多个go源文件,编译,输出可执行文件。go源文件列表中每个.go文件必须在同一个包。此方式适合编译少量go源文件。
# go build file1.go file2.go...
如gobuildcode例子。使用go build go源文件列表
的方式编译,默认选择文件列表中的第一个go源文件名,作为可执行文件名。
# go build main.go lib.go
# ls
main main.go lib.go
# ./main
call pkgFunc
hello world!
- 使用 -o 选项,指定输出的可执行文件名
# go build -o myexec main.go lib.go
# ls
myexec main.go lib.go
# ./myexec
call pkgFunc
hello world!
3. go build 包名
在设置GOPATH后,可以按包名编译。按包名编译的一个好处是,不论包下源文件的增删,照样可以编译。
代码结构
main.go
package main
import (
"fmt"
"github.com/locutus666/go_learing/ch16/gobuildpkg/mypkg"
)
func main() {
mypkg.CustomPkgFunc()
fmt.Println("hello world!")
}
mypkg.go
// mypkg包下的源文件
package mypkg
import "fmt"
func CustomPkgFunc() {
fmt.Println("call CustomPkgFunc")
}
按包编译
# cd /path/to/gobuildpkg
# go build -o main github.com/locutus666/go_learing/ch16/gobuildpkg
# ./main
其中待编译包的路径是相对于GOPATH的src目录开始的。GOPATH下路径名不要是中文。
4. go build编译时的附加参数
按使用频率排行
附加参数 | 备注 | 用例 |
---|---|---|
-v | 编译时显示包名 | go build -v |
-p n | 开启并发编译,默认情况,n为CPU逻辑核数 | go build -p 8 |
-a | 强制重新构建 | go build -a |
-n | 打印编译时会用到的所有命令,但不真正执行 | go build -n |
以上是关于go语言学习笔记 — 基础 — go工具:编译 —— go build的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 基础 — go工具:编译并安装 —— go install