2017-10-08 101 views
0

是否有可能在編譯時間和編譯器指定的代碼塊來檢測,例如操作系統名稱,如:編譯時間代碼塊

version(windows) 
{ 
} 

version(linux) 
{ 
} 
+1

雖然你應該更喜歡建立約束,也有在'runtime.GOOS'和'runtime.GOARCH'常數:https://golang.org/pkg/runtime/#pkg-常量 – JimB

回答

6

圍棋在構建時自動解決這個問題。您只需將代碼放在相應的文件:

  • file_linux.go - 代碼的Windows版本 - for Linux版本
  • file_windows.go代碼。

如果一個文件名,剝離擴展和可能_test後綴後,符合以下任一模式:

* _GOOS

* _GOARCH

* _GOOS_GOARCH (例如:source_windows_amd64.go

其中GOOS和GOARCH表示任何已知的操作系統和體系結構值分別爲 ,則該文件被認爲具有需要這些項的隱式構建約束(除了該文件中的任何明確的 約束)。

命名文件dns_windows.go將導致它僅在爲Windows構建軟件包時才被包含在 中;同樣地,math_386.s將爲 僅在爲32位x86構建軟件包時才包括在內。

https://golang.org/pkg/go/build/#hdr-Build_Constraints