欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

go語言編譯中間文件 go語言 編譯

go build -ldflags 打印編譯信息

go語言方便的地方之一就是容易部署, 編譯成二進(jìn)制文件,丟到服務(wù)器,就像一個內(nèi)陪鍵局建的bash程序,不用安裝依賴,不用部署環(huán)境,不用管理源碼,直接就運行了。這也會產(chǎn)生一個問題, 經(jīng)過年深日久的運行后,某天需要修改一個功能,可能最初開發(fā)的同事幾經(jīng)易手,那么,如何從這個二進(jìn)制文件找到源碼和對應(yīng)的信息呢?

邢臺縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!

本文主要就是解決這個問題,利用 go build 的 -ldflags -X, 把程序及相關(guān)的環(huán)境信息亮遲編譯進(jìn)項目的的help信息中,當(dāng)程序執(zhí)行-v時,有如下的輸出:

文件準(zhǔn)備完成后, 執(zhí)行下面的命令,把文件蘆讓加入git版本管理中,如果不加git管理, build.sh中的腳本會執(zhí)行報錯:

現(xiàn)在執(zhí)行build.sh 編譯二進(jìn)制文件,執(zhí)行完成后,可見文件目錄中多了一個文件 version-example

go語言 一個主package包引入同級目錄下go文件包編譯出錯!!

go語言 一個主package包引入同級目錄下go文件包編譯出錯是設(shè)置錯誤造成的,解舉孝喊慎猜決方法為:

1、先使用import "strings"導(dǎo)入strings庫。

2、HasPrefix?判斷字符串?s?是否以?prefix?開頭。

3、HasSuffix?判斷字符串?s?是否以?suffix?結(jié)尾。

4、可以看看判斷的代碼。

5、在cmd下運行一下go run test.go,看看如下結(jié)果。

6、Contains?判斷字符串?s?是否包含?substr,也就是判斷一下S是否在strings中。

7、在cmd下運行g(shù)o run test.go看看結(jié)果。正野

Go 是怎么使用 Go 來編譯自身的

是Go語言嗎?

Go 編譯過程 九個步驟

第一步. all.bash

% cd $GOROOT/src

% ./all.bash

第一步 all.bash 只是調(diào)用了另外兩個 shell 腳本:make.bash 和run.bash。若使用 Windows 或 Plan9,其過程也基本類似,只是腳本分別以 .bat 或 .rc 結(jié)尾。在文章的其他部分,請用適當(dāng)?shù)牟僮飨到y(tǒng)對應(yīng)的擴(kuò)展來補(bǔ)全命令。

第二步. make.bash

. ./make.bash --no-banner

make.bash 作為 all.bash 內(nèi)容的一部分,如果它退出也會中斷構(gòu)建過程

第三步. cmd/dist

gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c

當(dāng)健全檢查完成后,make.bash 開始編譯 cmd/dist。

第四步. go_bootstrap

現(xiàn)在 go_bootstrap 已經(jīng)構(gòu)建完成,make.bash 的最后一步是使用 go_bootstrap 編譯完整的 Go 標(biāo)準(zhǔn)庫,包括一個完整的 go 工具用以替換。

echo "# Building packages and commands for $GOOS/$GOARCH."

"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \

-ldflags "$GO_LDFLAGS" -v std

第五步. run.bash

現(xiàn)在 make.bash 已經(jīng)完成,回到 all.bash 的執(zhí)行,這會調(diào)用 run.bash。run.bash 的任務(wù)是編譯和測試標(biāo)準(zhǔn)庫、運行時以及語言測試集。

bash run.bash --no-rebuild

由于 make.bash 和 run.bash 都會調(diào)用 go install -a std,因此需要使用 –no-rebuild 標(biāo)志來避免重復(fù)前面的步驟,–no-rebuild 跳過了第二個 go install。

# allow all.bash to avoid double-build of everythingrebuild=trueif [ "$1" = "--no-rebuild" ]; then shiftelse echo '# Building packages and commands.' time go install -a -v std echofi

第六步. go test -a std

echo '# Testing packages.'

time go test std -short -timeout=$(expr 120 \* $timeout_scale)s

echo

接下來 run.bash 會在標(biāo)準(zhǔn)庫里所有的包上來運行用 testing 包編寫的單元測試。由于 $GOPATH 和 $GOROOT 中有著相同的命名空間,所以不能直接使用 go test … 否則 $GOPATH 中的每個包也會被逐一測試,因此創(chuàng)建了一個用于標(biāo)準(zhǔn)庫中旅遲含的包的別名:std。由于一些測試需要比較長的時間,且會消耗大量內(nèi)存,因此用 -short 標(biāo)志對一些測試進(jìn)行了過濾。

第七步. runtime 和 cgo 測試

run.bash 接下來的部分會運行平臺對 cgo 支持的測試,執(zhí)行一些性能測試,并且編譯一些伴隨 Go 發(fā)行版一起的雜項程序。隨著時間的流逝,這些雜項程序的清單會越來越長,那么它們也就會不可避免的被從編譯過程中悄悄剝離出去。

第八步. go run test

(xcd ../test

unset GOMAXPROCS

time go run run.go

) || exit $?

run.bash 的倒數(shù)第二步會調(diào)用在 $GOROOT 下的 test 目錄里的編譯器和運行時的測試。他們是對于編譯器和運行時自身的,較為低級細(xì)節(jié)的測試。會執(zhí)行語言規(guī)格測試,test/bugs 和 test/fixedbugs 子目錄保存有那拆笑些已經(jīng)被發(fā)現(xiàn)并被修復(fù)的問題的獨立的測試。驅(qū)動測試的是一個小 Go 程序 $GOROOT/test/run.go,會執(zhí)行 test 目錄里的每個 .go 文件。一些 .go 文件的首旦沖行包含了指導(dǎo) run.go 對結(jié)果作出判斷的指令,例如,程序?qū)。蛱峁┮粋€確定的輸出隊列。

第九步. go tool api

echo '# Checking API compatibility.'

go tool api -c $GOROOT/api/go1.txt,$GOROOT/api/go1.1.txt \

-next $GOROOT/api/next.txt -except $GOROOT/api/except.txt

run.bash 的最后一步調(diào)用了 api 工具。

本文標(biāo)題:go語言編譯中間文件 go語言 編譯
當(dāng)前路徑:http://chinadenli.net/article38/dsppjpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航微信公眾號面包屑導(dǎo)航營銷型網(wǎng)站建設(shè)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)