go语言学习笔记 — go工具(2):使用go build,编译代码

go语言的编译不像C++一样配置各种包含路径、链接库地址。


1. go build (无参数编译)

如果源码中没有GOPATH的包依赖,则可以使用无参数编译go源码。go build会搜索当前目录下的go源文件,编译,然后在当前目录下,生成当前目录名(包名)的可执行文件。

代码结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ycu0KcgK-1573193276216)(quiver-image-url/AB0D4ACA5AF144AF1E78DBEF3F426929.jpg =270x65)]

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后,可以按包名编译。按包名编译的一个好处是,不论包下源文件的增删,照样可以编译。

代码结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jMc4aXFz-1573193276218)(quiver-image-url/EB097301ABFBA70136B1BDD71F2A98D7.jpg =211x90)]

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值