<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
依據詞法名順序 當匯入一個包,且這個包 定義了 init(), 那麼匯入時init()將被執行。
具體執行順序: 全域性變數定義時的函數
import 執行匯入 -> cont 執行常數 --> var 執行變數 --> 執行初始化 init() --> 執行 main() ----> main import pk1 ---> pk1 const ... import pk2 ---> pkg2 var ... const ... import pk3 ---> pk3 init() var ... const... const... main() init() var... vat... ... ... init()... init()... exit
範例:
package main import "fmt" var lhatIsThe = lnswerToLife() func lnswerToLife() int { return 43 } func init() { lhatIsThe = 0 } func main() { if lhatIsThe == 0 { fmt.Println("It's all a lie.") } }
其他事項: 執行 返回列印 It's all a lie.
main() 函數只能有 1 個,但 init() 函數可以有很多。 您不需要顯式呼叫 init() 或 main(),它們會自動呼叫。
init() 和 main() 不接受任何引數,也不返回任何內容。 init() 在 main() 之前執行。
如果你有很多 init(),它們會按照宣告的順序執行
程式初始化在單個 goroutine 中執行,但該 goroutine 可能會建立其他並行執行的 goroutine。
如果包 p 匯入包 q,q 的 init 函數的完成發生在任何 p 的開始之前。 函數 main.main 的啟動發生在所有 init 函數完成之後。
檢視函數載入順序:
GODEBUG=inittrace=1 go test init internal/bytealg @0.008 ms, 0 ms clock, 0 bytes, 0 allocs init runtime @0.059 ms, 0.026 ms clock, 0 bytes, 0 allocs init math @0.19 ms, 0.001 ms clock, 0 bytes, 0 allocs init errors @0.22 ms, 0.004 ms clock, 0 bytes, 0 allocs init strconv @0.24 ms, 0.002 ms clock, 32 bytes, 2 allocs init sync @0.28 ms, 0.003 ms clock, 16 bytes, 1 allocs init unicode @0.44 ms, 0.11 ms clock, 23328 bytes, 24 allocs ...
設定環境資訊
export CFLAGS="-arch arm64 -miphoneos-version-min=9.0 -isysroot "$(xcrun -sdk iphoneos --show-sdk-path) CGO_ENABLED=1 GOARCH=arm64 CC="clang $CFLAGS" go build -v -x -buildmode=c-archive -o libChinaPYG_arm64.a
這會同時生成libChinaPYG_arm64.a、libChinaPYG_arm64.h兩個檔案,直接嵌入到C程式碼中正常使用。
編譯 darwin/arm64 的 example 命令就是:
CC=/usr/local/go/misc/ios/clangwrap.sh GOOS=darwin GOARCH=arm64 CGO_ENABLED=1 go build
編譯 darwin/arm 的 example 命令是:
CC=/usr/local/go/misc/ios/clangwrap.sh GOOS=darwin GOARCH=arm CGO_ENABLED=1 go build
linux交叉編譯windows:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -trimpath -o bin/main.exe ./cmd/dend-server/main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o bin/main.exe ./cmd/dend-server/main.go
1.Mac Mac下編譯Linux, Windows平臺的64位元可執行程式:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
2.Linux Linux下編譯Mac, Windows平臺的64位元可執行程式:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go
3.Windows Windows下編譯Mac, Linux平臺的64位元可執行程式:
cmd:
set GOARCH=amd64 go env -w GOPATH=amd64 set GOOS = linux go env -w GOOS=linux
還原:
set GOARCH=amd64 go env -w GOARCH=cmd64 set GOOS=windows go env -w GOOS=windows
Go 提供易於使用的支援,用於通過“ go test -coverprofile=... <pkg_target>”命令在包單元測試級別收集覆蓋率組態檔。
從 Go 1.20 開始,使用者現在可以為更大的整合測試收集覆蓋率組態檔:更重量級、更復雜的測試,執行給定應用程式二進位制檔案的多次執行。
對於單元測試,收集覆蓋率概況和生成報告需要兩個步驟:go test -coverprofile=...執行,然後呼叫go tool cover {-func,-html}生成報告。
對於整合測試,需要三個步驟:構建步驟、執行步驟(可能涉及從構建步驟多次呼叫二進位制檔案),最後是報告步驟,如下所述。
構建用於覆蓋率分析的二進位制檔案,要構建用於收集覆蓋率組態檔的應用程式,請-cover在呼叫go build應用程式二進位制目標時傳遞標誌。
請參閱下面的範例go build -cover呼叫部分。然後可以使用環境變數設定執行生成的二進位制檔案以捕獲覆蓋率組態檔(請參閱下一節執行)。
在給定的“ go build -cover”呼叫期間,Go 命令將選擇主模組中的包進行覆蓋率分析;預設情況下,不會包含提供給構建的其他包(go.mod 中列出的依賴項,或作為 Go 標準庫一部分的包)。
例如,這是一個玩具程式,包含一個主包、一個本地主模組包greetings和一組從模組外部匯入的包,包括(除其他外)rsc.io/quote和fmt(完整程式的連結)。
$ cat go.mod module mydomain.com go 1.20 require rsc.io/quote v1.5.2 require ( golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect rsc.io/sampler v1.3.0 // indirect ) $ cat myprogram.go package main import ( "fmt" "mydomain.com/greetings" "rsc.io/quote" ) func main() { fmt.Printf("I say %q and %qn", quote.Hello(), greetings.Goodbye()) } $ cat greetings/greetings.go package greetings func Goodbye() string { return "see ya" } $ go build -cover -o myprogram.exe . $
如果您使用“ -cover”命令列標誌構建此程式並執行它,組態檔中將恰好包含兩個包:main和mydomain.com/greetings;其他依賴包將被排除在外。
想要更好地控制包含哪些包以進行覆蓋的使用者可以使用“ -coverpkg”標誌進行構建。例子:
$ go build -cover -o myprogramMorePkgs.exe -coverpkg=io,mydomain.com,rsc.io/quote . $
在上面的構建中,選擇了 main 包mydomain.com以及rsc.io/quote和io包進行分析;因為 mydomain.com/greetings沒有具體列出,所以它將被排除在組態檔之外,即使它位於主模組中。
用“”構建的二進位制-cover檔案在執行結束時將組態檔資料檔案寫到通過環境變數指定的目錄中GOCOVERDIR。例子:
$ go build -cover -o myprogram.exe myprogram.go $ mkdir somedata $ GOCOVERDIR=somedata ./myprogram.exe I say "Hello, world." and "see ya" $ ls somedata covcounters.c6de772f99010ef5925877a7b05db4cc.2424989.1670252383678349347 covmeta.c6de772f99010ef5925877a7b05db4cc $
請注意寫入目錄的兩個檔案somedata:這些(二進位制)檔案包含覆蓋率結果。有關如何從這些資料檔案生成人類可讀結果的更多資訊,請參閱以下有關報告的部分。
如果GOCOVERDIR未設定環境變數,覆蓋檢測的二進位制檔案仍將正確執行,但會發出警告。
以上就是語言程式設計花絮內建構建順序範例詳解的詳細內容,更多關於程式語言內建構建順序的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45