CGO 提供了 golang 和 C 語言相互呼叫的機制。某些第三方函式庫可能只有 C/C 的實現,完全用純 golang 的實作可能工程浩大,這時候 CGO 就派上用場了。 (建議學習:go)
可以通 CGO 在 golang 在呼叫 C 的接口,C 的介面可以用 C 包裝一下提供給 golang 呼叫。
被呼叫的 C 程式碼可以直接以原始程式碼形式提供或打包靜態函式庫或動態函式庫在編譯時連結。建議使用靜態函式庫的方式,這樣方便程式碼隔離,編譯的二進位也沒有動態函式庫依賴方便發布也符合 golang 的哲學。
CGO 的具體使用教學本文就不涉及了,這裡主要介紹下一些細節避免使用 CGO 的時候踩坑。
參數傳遞
基本數值型別
golang 的基本數值類型記憶體模型和C 語言一樣,就是連續的幾個位元組(1 / 2 / 4 / 8 位元組)。
因此傳遞數值類型時可以直接將 golang 的基本數值類型轉換成對應的 CGO 類型然後傳遞給 C 函數調用,反之亦然:
package main /* #include <stdint.h> static int32_t add(int32_t a, int32_t b) { return a + b; } */ import "C" import "fmt" func main() { var a, b int32 = 1, 2 var c int32 = int32(C.add(C.int32_t(a), C.int32_t(b))) fmt.Println(c) // 3 }
以上是Golang Cgo是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!