㈠ Go 是怎麼使用 Go 來編譯自身的
是Go語言嗎?
Go 編譯過程 九個步驟
第一步. all.bash
% cd $GOROOT/src
% ./all.bash
第一步 all.bash 只是調用了另外兩個 shell 腳本:make.bash 和run.bash。若使用 Windows 或 Plan9,其過程也基本類似,只是腳本分別以 .bat 或 .rc 結尾。在文章的其他部分,請用適當的操作系統對應的擴展來補全命令。
第二步. make.bash
. ./make.bash --no-banner
make.bash 作為 all.bash 內容的一部分,如果它退出也會中斷構建過程
第三步. cmd/dist
gcc -O2 -Wall -Werror -ggdb -o cmd/dist/dist -Icmd/dist cmd/dist/*.c
當健全檢查完成後,make.bash 開始編譯 cmd/dist。
第四步. go_bootstrap
現在 go_bootstrap 已經構建完成,make.bash 的最後一步是使用 go_bootstrap 編譯完整的 Go 標准庫,包括一個完整的 go 工具用以替換。
echo "# Building packages and commands for $GOOS/$GOARCH."
"$GOTOOLDIR"/go_bootstrap install -gcflags "$GO_GCFLAGS" \
-ldflags "$GO_LDFLAGS" -v std
第五步. run.bash
現在 make.bash 已經完成,回到 all.bash 的執行,這會調用 run.bash。run.bash 的任務是編譯和測試標准庫、運行時以及語言測試集。
bash run.bash --no-rebuild
由於 make.bash 和 run.bash 都會調用 go install -a std,因此需要使用 –no-rebuild 標志來避免重復前面的步驟,–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 會在標准庫里所有的包上來運行用 testing 包編寫的單元測試。由於 $GOPATH 和 $GOROOT 中有著相同的命名空間,所以不能直接使用 go test … 否則 $GOPATH 中的每個包也會被逐一測試,因此創建了一個用於標准庫中的包的別名:std。由於一些測試需要比較長的時間,且會消耗大量內存,因此用 -short 標志對一些測試進行了過濾。
第七步. runtime 和 cgo 測試
run.bash 接下來的部分會運行平台對 cgo 支持的測試,執行一些性能測試,並且編譯一些伴隨 Go 發行版一起的雜項程序。隨著時間的流逝,這些雜項程序的清單會越來越長,那麼它們也就會不可避免的被從編譯過程中悄悄剝離出去。
第八步. go run test
(xcd ../test
unset GOMAXPROCS
time go run run.go
) || exit $?
run.bash 的倒數第二步會調用在 $GOROOT 下的 test 目錄里的編譯器和運行時的測試。他們是對於編譯器和運行時自身的,較為低級細節的測試。會執行語言規格測試,test/bugs 和 test/fixedbugs 子目錄保存有那些已經被發現並被修復的問題的獨立的測試。驅動測試的是一個小 Go 程序 $GOROOT/test/run.go,會執行 test 目錄里的每個 .go 文件。一些 .go 文件的首行包含了指導 run.go 對結果作出判斷的指令,例如,程序將會失敗,或提供一個確定的輸出隊列。
第九步. 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 的最後一步調用了 api 工具。
㈡ mac無法運行golang生成exe
具體如下:
mac下編譯器默認編譯的是mac os x的可執行文件。編譯centos上的可執行文件的時候需要交叉編譯。
golang的交叉編譯很容易,情況用下面這條命令 GOOS=linux GOARCH=amd64 go build ./文件。
㈢ golang 在mac 下go install成二進制文件,上傳到centos 無法執行
mac下編譯器默認編譯的是mac os x的可執行文件。
編譯centos上的可執行文件的時候需要交叉編譯。
golang的交叉編譯很容易,你的情況的話用下面這條命令
GOOS=linux GOARCH=amd64 go build ./文件
㈣ go語言開發工具liteide調試功能用不起來,版本為x27.1版本,編譯後執行調試中的開始調試無
檢查下調試前有沒有build,是不是從main包開始的
㈤ 搭了一天的sublime text 的go環境,已經不能編譯,求助
首先確定配置好g++/gcc環境了嗎?
檢查的辦法就是在命令行窗口輸入gcc看看有沒有什麼反應。
可能你的builder文件不對,我把我的貼出來給你試試看(我已經配好了,完全正確的)
{
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c, source.c++, source.cpp",
"shell": true,
"cmd": ["g++", "${file}", "-o", "${file_path}/${file_base_name}","-Wall", "&&","st
㈥ 搭了一天的sublime text 的go環境,已經不能編譯,求助
使用liteide吧,或者在命令行下編譯,不要使用sublime帶的命令行,只要sublime提供自動完成酒ok了。
如果你項目不是非常復雜的話,不需要寫makefile,在項目目錄下執行go build就行了。
㈦ go語言並發入門編程,我的子協程為什麼不會執行
一開始你只有一個主協程,如果子協程不啟動,即便主協程讓出了時間片,也沒有可運行的子協程啊。交換順序就是起到了先啟動子協程的作用。
㈧ sublime go語言編譯運行失敗如何解決
新建編譯系統gcc
把大括弧里的東西換成這個
"cmd": ["gcc","${file}", "-o", "${file_path}/${file_base_name}"],
"file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir":"${file_path}",
"selector": "source.c",
"variants":
[
{
"name": "Run",
"cmd": ["cmd","/c", "gcc", "${file}", "-o", "${file_path}/${file_base_name}","&&", "cmd", "/c","${file_path}/${file_base_name}"]
}
,保存為gcc.sublime-build
然後把編譯系統換成你剛建立的gcc,然後就可以了,記得編譯之前要先保存文件才可以
㈨ 如何讓go編譯的程序後台運行
請自行查看我前面寫得GO語言開發環境和GO語言IDE編輯器的經驗文章
我們先寫一段GO代碼
很簡單就是列印輸出一個hello world!
保存為print.go文件
然後再CMD下一路cd到print.go目錄下來
在cmd下運行 go run print.go就可以運行go程序了
看看運行結果
GO程序的代碼是可以直接編譯成exe文件的
在print.go目錄下運行 go build print.go即可把go程序編譯成exe文件
完成之後看看exe文件是否存在
最好我們要看看運行exe的效果
㈩ go語言 一個主package包引入同級目錄下go文件包編譯出錯!!
go語言 一個主package包引入同級目錄下go文件包編譯出錯是設置錯誤造成的,解決方法為:
1、先使用import "strings"導入strings庫。