在go語言中,「go build」命令主要用於編譯程式碼,可以將Go語言程式碼編譯成二進位的可執行文件,但是需要手動執行該二進位檔案。 「go build」有很多種編譯方法,如無參數編譯、檔案清單編譯、指定套件編譯等,使用這些方法都可以輸出執行檔。
本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。
Go語言是編譯型的靜態語言(和C語言一樣),所以在執行Go語言程式之前,先要將其編譯成二進位的可執行檔。
可以透過Go語言提供的go build
或go run
指令對Go語言程式進行編譯:
go build
指令可以將Go語言程式碼編譯成二進位的可執行文件,但是需要我們手動執行該二進位檔案;
##go run指令則比較方便,它會在編譯後直接執行Go語言程序,編譯過程會產生一個臨時文件,但不會產生可執行文件,這個特點很適合用來除錯程式。
go build指令(go語言編譯指令)
Go語言中使用go build 指令主要用於編譯代碼。在套件的編譯過程中,若有必要,會同時編譯與之相關聯的套件。 go build 有許多種編譯方法,例如無參數編譯、檔案清單編譯、指定套件編譯等,使用這些方法都可以輸出執行檔。go build 無參數編譯
本小節需要用到的程式碼具體位置是./src/chapter11/gobuild。
. └── src └── chapter11 └── gobuild ├── lib.go └── main.gomain.go 程式碼如下:
package main import ( "fmt" ) func main() { // 同包的函数 pkgFunc() fmt.Println("hello world") }lib.go 程式碼如下:
package main import "fmt" func pkgFunc() { fmt.Println("call pkgFunc") }如果原始碼中沒有依賴GOPATH 的套件引用,那麼這些原始碼可以使用無參數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命令列指令和輸出說明如下:
go build 檔案清單
#編譯同目錄的多個原始碼檔案時,可以在go build 的後面提供多個檔案名, go build 會編譯這些原始碼,輸出可執行文件,「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命令列指令與輸出說明如下:
go build 檔案清單」方式編譯時,執行檔預設選擇檔案清單中第一個原始碼文件作為可執行檔名輸出。
-o參數,請參考下面的範例:
$ go build -o myexec main.go lib.go $ ls lib.go main.go myexec $ ./myexec call pkgFunc hello world上面程式碼中,在go build 和檔案清單之間插入了
-o myexec參數,表示指定輸出檔名為myexec。
go build 檔案清單」方式更適合使用Go語言寫的只有少量檔案的工具。
go build 套件
「go build 套件」在設定GOPATH 後,可以直接根據套件名稱進行編譯,即使封包內檔案被增加(加)刪(除)也不影響編譯指令。 1) 程式碼位置及原始碼本小节需要用到的代码具体位置是./src/chapter11/goinstall。
本套教程所有源码下载地址:https://pan.baidu.com/s/1ORFVTOLEYYqDhRzeq0zIiQ 提取密码:hfyf
相对于GOPATH的目录关系如下:
. └── 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) 按包编译命令
执行以下命令将按包方式编译 goinstall 代码:
$ export GOPATH=/home/davy/golangbook/code $ go build -o main chapter11/goinstall $ ./goinstall call CustomPkgFunc hello world
代码说明如下:
第 1 行,设置环境变量 GOPATH,这里的路径是笔者的目录,可以根据实际目录来设置 GOPATH。
第 2 行,-o执行指定输出文件为 main,后面接要编译的包名。包名是相对于 GOPATH 下的 src 目录开始的。
第 3~5 行,编译成功,执行 main 后获得期望的输出。
go build 编译时的附加参数
go build 还有一些附加参数,可以显示更多的编译信息和更多的操作,详见下表所示。
附加参数 | 备 注 |
---|---|
-v | 编译时显示包名 |
-p n | 开启并发编译,默认情况下该值为 CPU 逻辑核数 |
-a | 强制重新构建 |
-n | 打印编译时会用到的所有命令,但不真正执行 |
-x | 打印编译时会用到的所有命令 |
-race | 开启竞态检测 |
表中的附加参数按使用频率排列,读者可以根据需要选择使用。
以上是go語言中build指令怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!