新聞中心
Go語言的編譯速度非常快。Go 1.9 版本后默認(rèn)利用Go語言的并發(fā)特性進(jìn)行函數(shù)粒度的并發(fā)編譯。

創(chuàng)新互聯(lián)公司自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元岳麓做網(wǎng)站,已為上家服務(wù),為岳麓各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
Go語言的程序編寫基本以源碼方式,無論是自己的代碼還是第三方代碼,并且以 GOPATH 作為工作目錄和一套完整的工程目錄規(guī)則。因此Go語言中日常編譯時(shí)無須像 C++ 一樣配置各種包含路徑、鏈接庫地址等。
Go語言中使用 go build 命令主要用于編譯代碼。在包的編譯過程中,若有必要,會(huì)同時(shí)編譯與之相關(guān)聯(lián)的包。
go build 有很多種編譯方法,如無參數(shù)編譯、文件列表編譯、指定包編譯等,使用這些方法都可以輸出可執(zhí)行文件。
go build 無參數(shù)編譯
本小節(jié)需要用到的代碼具體位置是./src/chapter11/gobuild。
本套教程所有源碼下載地址: https://pan.baidu.com/s/1ORFVTOLEYYqDhRzeq0zIiQ 提取密碼:hfyf
代碼相對(duì)于 GOPATH 的目錄關(guān)系如下:
.
└── src
└── chapter11
└── gobuild
├── lib.go
└── main.go
main.go 代碼如下:
package main
import (
"fmt"
)
func main() {
// 同包的函數(shù)
pkgFunc()
fmt.Println("hello world")
}lib.go 代碼如下:
package main
import "fmt"
func pkgFunc() {
fmt.Println("call pkgFunc")
}如果源碼中沒有依賴 GOPATH 的包引用,那么這些源碼可以使用無參數(shù) go build。格式如下:
go build
在代碼所在目錄(./src/chapter11/gobuild)下使用 go build 命令,如下所示:
$ cd src/chapter11/gobuild/
$ go build
$ ls
gobuild lib.go main.go
$ ./gobuild
call pkgFunc
hello world
命令行指令和輸出說明如下:
- 第 1 行,轉(zhuǎn)到本例源碼目錄下。
- 第 2 行,go build 在編譯開始時(shí),會(huì)搜索當(dāng)前目錄的 go 源碼。這個(gè)例子中,go build 會(huì)找到 lib.go 和 main.go 兩個(gè)文件。編譯這兩個(gè)文件后,生成當(dāng)前目錄名的可執(zhí)行文件并放置于當(dāng)前目錄下,這里的可執(zhí)行文件是 go build。
- 第 3 行和第 4 行,列出當(dāng)前目錄的文件,編譯成功,輸出 go build 可執(zhí)行文件。
- 第 5 行,運(yùn)行當(dāng)前目錄的可執(zhí)行文件 go build。
- 第 6 行和第 7 行,執(zhí)行 go build 后的輸出內(nèi)容。
go build+文件列表
編譯同目錄的多個(gè)源碼文件時(shí),可以在 go build 的后面提供多個(gè)文件名,go build 會(huì)編譯這些源碼,輸出可執(zhí)行文件,“go build+文件列表”的格式如下:
go build file1.go file2.go……
在代碼代碼所在目錄(./src/chapter11/gobuild)中使用 go build,在 go build 后添加要編譯的源碼文件名,代碼如下:
$ go build main.go lib.go
$ ls
lib.go main main.go
$ ./main
call pkgFunc
hello world
$ go build lib.go main.go
$ ls
lib lib.go main main.go
命令行指令和輸出說明如下:
- 第 1 行在 go build 后添加文件列表,選中需要編譯的 Go 源碼。
- 第 2 行和第 3 行列出完成編譯后的當(dāng)前目錄的文件。這次的可執(zhí)行文件名變成了 main。
- 第 4~6 行,執(zhí)行 main 文件,得到期望輸出。
- 第 7 行,嘗試調(diào)整文件列表的順序,將 lib.go 放在列表的首位。
- 第 8 行和第 9 行,編譯結(jié)果中出現(xiàn)了 lib 可執(zhí)行文件。
提示
使用“go build+文件列表”方式編譯時(shí),可執(zhí)行文件默認(rèn)選擇文件列表中第一個(gè)源碼文件作為可執(zhí)行文件名輸出。
如果需要指定輸出可執(zhí)行文件名,可以使用-o參數(shù),參見下面的例子:
$ go build -o myexec main.go lib.go
$ ls
lib.go main.go myexec
$ ./myexec
call pkgFunc
hello world
上面代碼中,在 go build 和文件列表之間插入了-o myexec參數(shù),表示指定輸出文件名為 myexec。
注意
使用“go build+文件列表”編譯方式編譯時(shí),文件列表中的每個(gè)文件必須是同一個(gè)包的 Go 源碼。也就是說,不能像 C++ 一樣將所有工程的 Go 源碼使用文件列表方式進(jìn)行編譯。編譯復(fù)雜工程時(shí)需要用“指定包編譯”的方式。
“go build+文件列表”方式更適合使用Go語言編寫的只有少量文件的工具。
go build+包
“go build+包”在設(shè)置 GOPATH 后,可以直接根據(jù)包名進(jìn)行編譯,即便包內(nèi)文件被增(加)刪(除)也不影響編譯指令。
1) 代碼位置及源碼
本小節(jié)需要用到的代碼具體位置是./src/chapter11/goinstall。
本套教程所有源碼下載地址: https://pan.baidu.com/s/1ORFVTOLEYYqDhRzeq0zIiQ 提取密碼:hfyf
相對(duì)于GOPATH的目錄關(guān)系如下:
.
└── src
└── chapter11
└──goinstall
├── main.go
└── mypkg
└── mypkg.go
main.go代碼如下:
package main
import (
"chapter11/goinstall/mypkg"
"fmt"
)
func main() {
mypkg.CustomPkgFunc()
fmt.Println("hello world")
}mypkg.go代碼如下:
package mypkg
import "fmt"
func CustomPkgFunc() {
fmt.Println("call CustomPkgFunc")
}2) 按包編譯命令
執(zhí)行以下命令將按包方式編譯 goinstall 代碼:
$ export GOPATH=/home/davy/golangbook/code
$ go build -o main chapter11/goinstall
$ ./goinstall
call CustomPkgFunc
hello world
代碼說明如下:
- 第 1 行,設(shè)置環(huán)境變量 GOPATH,這里的路徑是筆者的目錄,可以根據(jù)實(shí)際目錄來設(shè)置 GOPATH。
- 第 2 行,
-o執(zhí)行指定輸出文件為 main,后面接要編譯的包名。包名是相對(duì)于 GOPATH 下的 src 目錄開始的。 - 第 3~5 行,編譯成功,執(zhí)行 main 后獲得期望的輸出。
讀者在參考這個(gè)例子編譯代碼時(shí),需要將 GOPATH 更換為自己的目錄。注意 GOPATH 下的目錄結(jié)構(gòu),源碼必須放在 GOPATH 下的 src 目錄下。所有目錄中不要包含中文。
go build 編譯時(shí)的附加參數(shù)
go build 還有一些附加參數(shù),可以顯示更多的編譯信息和更多的操作,詳見下表所示。
| 附加參數(shù) | 備 注 |
|---|---|
| -v | 編譯時(shí)顯示包名 |
| -p n | 開啟并發(fā)編譯,默認(rèn)情況下該值為 CPU 邏輯核數(shù) |
| -a | 強(qiáng)制重新構(gòu)建 |
| -n | 打印編譯時(shí)會(huì)用到的所有命令,但不真正執(zhí)行 |
| -x | 打印編譯時(shí)會(huì)用到的所有命令 |
| -race | 開啟競(jìng)態(tài)檢測(cè) |
表中的附加參數(shù)按使用頻率排列,讀者可以根據(jù)需要選擇使用。
網(wǎng)站題目:創(chuàng)新互聯(lián)GO教程:go build命令(go語言編譯命令)完全攻略
標(biāo)題來源:http://m.fisionsoft.com.cn/article/cdpdjgs.html


咨詢
建站咨詢
