首頁  >  文章  >  後端開發  >  當為 amd64 建置 go 二進位時,使用 uname 在 mac 中取得處理器架構會給出錯誤的結果

當為 amd64 建置 go 二進位時,使用 uname 在 mac 中取得處理器架構會給出錯誤的結果

王林
王林轉載
2024-02-09 13:09:07515瀏覽

当为 amd64 构建 go 二进制文件时,使用 uname 在 mac 中获取处理器架构会给出错误的结果

php小編西瓜在處理amd64建置go二進位時發現了一個問題。在mac系統中,使用uname取得處理器架構會導致錯誤的結果。這個問題可能會對編譯和建置過程產生影響,因此需要注意。正確的獲取處理器架構的方法是透過go的內建函數runtime.GOARCH來實現。這樣可以避免因uname導致的錯誤,確保編譯和建置的準確性。

問題內容

我有一個 golang 服務,需要取得處理器的架構類型

archCmd := exec.Command("uname", "-m")
arch, _ := archCmd.CombinedOutput()

我在 Intel 和 Arm 機器上運行相同的二進位。二進位檔案是用

建構的
GOOS=darwin GOARCH=amd64

在 ARM 機器上,這會取得 x86_64。自從我使用 GOARCH=amd64 構建以來,似乎就發生了這種情況。但我不確定為什麼會發生這種情況。 如果我想在 intel 和 arm 機器上運行相同的建置二進位文件,我的替代方案是什麼?

解決方法

引用@hrdy描述此問題的註解:

引用單獨的超級使用者答案:https://www.php.cn/link/211fff9e65c0e47a790c629116e32996

#

...這將需要一些條件邏輯來偵測作業系統以及解析以偵測 Apple CPU 類型。如果此字串值發生更改,這可能會在將來中斷。

archCmd := exec.Command("sysctl", "machdep.cpu.brand_string")
arch, _ := archCmd.CombinedOutput()

再次,歸功於 @selalerercapitolis 的答案連結。

以上是當為 amd64 建置 go 二進位時,使用 uname 在 mac 中取得處理器架構會給出錯誤的結果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除