彌合差距:從C 專案中呼叫Go 程式碼
在軟體工程領域,跨語言整合起著至關重要的作用擴展現有項目的能力。隨著Go 1.5的出現,從C程式無縫調用Go程式碼的前景已經成為現實。本文深入探討了實現此整合的實際方面,闡明了其中的細微差別和最佳實踐。
建立 C-Callable Go 檔案
渲染 Go 程式碼對於 C 程式來說,必須在編譯期間呼叫 -buildmode=c-archive 標誌。此標誌產生一個 C 可呼叫靜態函式庫 (.a) 和一個關聯的頭檔 (.h)。在 Go 程式碼中,必須使用 //export 註解將特定函數標記為匯出。此外,包含這些函數的套件應命名為 main 並定義一個空的 main 函數。
例如,考慮以下foo.go 檔案:
package main import ( "C" "fmt" ) //export PrintInt func PrintInt(x int) { fmt.Println(x) } func main() {}
編譯為C相容性
要建置C 可呼叫的檔案和標頭,請執行以下指令指令:
go build -buildmode=c-archive foo.go
在C 中使用Go函數
產生的頭檔提供了存取 C 中導出的 Go 函數所需的宣告。在附帶的C 程式foo 中.c 中,PrintInt 函數可以如下呼叫:
#include "foo.h" int main(int argc, char **argv) { PrintInt(42); return 0; }
連結和執行
要建立連結Go 和C 程式碼的最終可執行文件,請使用以下命令編譯 C程序:
gcc -pthread foo.c foo.a -o foo
結論
利用Go 1.5 中引入的功能,開發人員可以將Go 的強大功能和便利性無縫整合到現有的C 項目中。這個過程包括標記要匯出的 Go 函數、將它們編譯成 C 相容的存檔,以及使用產生的頭檔在 C 程式碼中使用這些函數。有了這些知識,程式設計師可以利用兩種語言的綜合優勢,釋放新的可能性並增強其軟體系統的功能。
以上是如何從我的 C 專案中呼叫 Go 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!