溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

go語言中的Cgo是什么

發(fā)布時間:2020-06-21 13:46:21 來源:億速云 閱讀:1781 作者:元一 欄目:編程語言

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)文章!

向AI問一下細(xì)節(jié)

免責(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)容。

AI