第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中封裝平臺特定代碼的正確方法是什么?

在 Go 中封裝平臺特定代碼的正確方法是什么?

Go
阿晨1998 2021-12-13 18:38:18
我想開發(fā)一個小的 Go 應(yīng)用程序,它向演示文稿的觀眾顯示使用的按鍵快捷方式。要掛鉤鍵盤事件,我將不得不使用一些特定于平臺的代碼。封裝平臺特定代碼的 Go 方式是什么?我一直在搜索諸如編譯器開關(guān)或平臺模塊之類的關(guān)鍵字,但我無法真正找到相關(guān)信息。
查看完整描述

2 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗 獲得超6個贊

雖然@icza 的答案絕對是 OP 關(guān)于條件編譯問題的正確權(quán)威答案,但在這種特定情況下,更簡單的方法可能是值得的。


Go 是一種旨在在每個平臺上編譯相同(使用相同編譯器)的語言,以鼓勵跨平臺代碼和庫重用。Go 不是 C/C++,因此必須花費時間來編寫明確的跨平臺代碼。


當(dāng)然,平臺不可知性僅適用于 Go 的運行時,并且您正在嘗試捕獲按鍵,為此沒有真正的單一平臺不可知的解決方案。


因此,我對這個用例的更簡單的建議類似于以下內(nèi)容:


package main


import (

    "runtime"

    kp "kplib"

)


func main () {

    switch runtime.GOOS {

    case "windows":

        kp.WinKey()

    case "darwin":

        kp.MacKey()

    case "linux":

        kp.UnixKey()

    default:

        kp.TryKey()

    }

}

有了隱含的保證,假設(shè)kplib將在任何地方編譯(只需確保在給定平臺上調(diào)用正確的方法?。?。


查看完整回答
反對 回復(fù) 2021-12-13
?
達(dá)令說

TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊

平臺特定代碼的解決方案是構(gòu)建約束

注意:在 Go 1.17 之前,語法是以 開頭的注釋行// +build,但 Go 1.17 引入了//go:buildpragma 現(xiàn)在是首選方式。

構(gòu)建約束,也稱為構(gòu)建標(biāo)記,是一行注釋,以

//go:build

它列出了文件應(yīng)包含在包中的條件。約束可以出現(xiàn)在任何類型的源文件中(不僅僅是 Go),但它們必須出現(xiàn)在文件頂部附近,前面只能有空行和其他行注釋。這些規(guī)則意味著在 Go 文件中,構(gòu)建約束必須出現(xiàn)在 package 子句之前。

所以基本上每個平臺特定的 Go 代碼應(yīng)該放在不同的文件中,你可以用它們的目標(biāo)來標(biāo)記每個 Go 文件。

例如,如果文件包含 Linux 特定代碼(例如系統(tǒng)調(diào)用),請以以下方式啟動它:

//go:build linux

如果文件包含特定于 Windows 的系統(tǒng)調(diào)用,請使用以下命令啟動它:

//go:build windows

有更多“選項”可用,請閱讀鏈接的文檔。例如,您可以指定對操作系統(tǒng)、架構(gòu)、Go 版本、正在使用的編譯器的約束。您還可以指定多個約束,這些約束將使用邏輯 OR 或 AND 進(jìn)行解釋,或者您可以使用否定(例如,此代碼適用于除 linux 之外的每個目標(biāo)平臺)。

您甚至.go可以使用以下約束標(biāo)記要忽略的文件:

//go:build ignore

請注意,構(gòu)建約束是特定于編譯器的。如果特定編譯器無法識別構(gòu)建約束,則編譯器將忽略該文件。例如,Go AppEngine SDK 帶有一個內(nèi)置的、經(jīng)過修改的 Go 編譯器,它額外識別

//go:build appengine

約束,這意味著源文件僅適用于 Google App Engine 平臺?!俺R?guī)”Go 編譯器將忽略該文件,如果有人嘗試在沒有 Go AppEngine SDK 的情況下構(gòu)建代碼,則您可能不會出現(xiàn)一堆編譯器錯誤。


查看完整回答
反對 回復(fù) 2021-12-13
  • 2 回答
  • 0 關(guān)注
  • 236 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號