如何在 C# 中調用 Golang 函數?
Go 語言提供了 CGO 機制,使得能夠在 Go 代碼中直接調用 C 的庫函數,此外還支持在 C 語言中調用 Go 函數,非常強大。Golang 支持將 Go 函數導出給 C 語言使用,那么也同樣可以給 C# 使用。
CGO 環境搭建
要使用 CGO 特性,需要安裝 C/C 構建工具鏈,在 macOS 和 Linux 下是要安裝好 GCC,在 Windows 下是需要安裝 MinGW 工具。如果你的電腦上已經安裝好 GCC ,則可以跳過本小節。
關於 MinGW 的安裝網上已經有很多教程,本篇將介紹一種更簡單的方法來安裝 MinGW :通過安裝 QT 來部署 MinGW 到本機(該方法來自:ha666)。QT 的安裝包中自帶了 MinGW 環境,我們只要安裝 QT 開發包,那么附帶的 MinGW 環境就安裝好了。
QT 的下載地址可以在:http://download.qt.io/archive/qt/ 中找到,目前(2020年1月28日)最新的版本是 5.14.1 ,Windows 版的下載地址是:qt-opensource-windows-x86-5.14.1.exe 。
如果你沒有且不想創建 QT 的網絡賬戶,那么在運行 QT 的安裝文件之前,可以先斷開網絡,這樣就不會出現 QT 賬戶的注冊和登錄界面:
在“選擇組件”頁面中,勾選 MinGW 組件。
在安裝完成之后,需要設置好環境變量 Go 編譯器才能找到 GCC 的安裝位置。如果你使用的軟件版本和我相同並且沒有更改默認安裝位置,那么這個要添加到 PATH 變量中的目錄地址應該是:C:\Qt\Qt5.14.0\Tools\mingw730_32\bin\
如果安裝正確並配置好了環境變量,那么在命令行中鍵入 gcc ,將會看到以下輸出:
Hello Golang
編寫 Golang 代碼,文件名為 main.go
。注意:雖然我們最終要生成動態鏈接庫,但是 main 函數仍是不可或缺的。
main.go
接下來對 Go 源文件進行編譯,新建一個 make.bat
文件,填入一下指令並運行:
make.bat
命令成功后,我們會得到兩個文件:HelloGolang.Interop.h
和 HelloGolang.Interop.dll
。
使用 Visual Studio 新建 HelloGolang 控制台應用程序,並將生成的目標平台設置為 x86
。將 HelloGolang.Interop.dll
添加到項目中,並設置為“始終復制”:
HelloGolang.csproj
在 Program.cs
文件中,使用 DllImport
導入外部方法並調用:
Program.cs
運行程序,那么將會在控制台中看到以下輸出:
Hello Golang 輸出
其中,第一行的 Hello World!
來自 C# 程序,第二行 Hello C#,I'm golang!
則來自 Go 程序。