您好,登錄后才能下訂單哦!
CGO用于在GO代碼中使用C語言編程,或者說是調(diào)用C代碼封裝的鏈接庫文件中編寫的函數(shù),有些想用的東西GOLANG沒有官方源碼,但是C語言有時,就可以用CGO調(diào)用它,比如喜聞樂見的OpenCV。
可以通 CGO 在 golang 在調(diào)用 C 的接口,C++ 的接口可以用 C 包裝一下提供給 golang 調(diào)用。
被調(diào)用的 C 代碼可以直接以源代碼形式提供或者打包靜態(tài)庫或動態(tài)庫在編譯時鏈接。推薦使用靜態(tài)庫的方式,這樣方便代碼隔離,編譯的二進制也沒有動態(tài)庫依賴方便發(fā)布也符合 golang 的哲學(xué)。
CGO 的具體使用教程本文就不涉及了,這里主要介紹下一些細(xì)節(jié)避免使用 CGO 的時候踩坑。
參數(shù)傳遞
基本數(shù)值類型
golang 的基本數(shù)值類型內(nèi)存模型和 C 語言一樣,就是連續(xù)的幾個字節(jié)(1 / 2 / 4 / 8 字節(jié))。
因此傳遞數(shù)值類型時可以直接將 golang 的基本數(shù)值類型轉(zhuǎn)換成對應(yīng)的 CGO 類型然后傳遞給 C 函數(shù)調(diào)用,反之亦然:
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是什么的詳細(xì)內(nèi)容,更多請關(guān)注億速云其它相關(guān)文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。