go 调用其他文件函数_【C# 调用 Go 语言】0x1 Hello Golang
C# 和 Golang 都不是世界上最好的語(yǔ)言。在不同的業(yè)務(wù)場(chǎng)景下,C# 和 Golang 各有所長(zhǎng)。如果要編寫一個(gè)網(wǎng)絡(luò)程序,顯然 Golang 更擅長(zhǎng),而如果要編寫一個(gè)桌面 GUI 程序,那么 C# 簡(jiǎn)直不要太爽。我們完全可以將兩者用在同一個(gè)項(xiàng)目中,各取所長(zhǎng)。Golang 支持將源代碼編譯為動(dòng)態(tài)鏈接庫(kù)(dll),這讓我們?cè)?C# 調(diào)用 Golang 成為可能。
本篇代碼可以在:https://gitee.com/coderbusy/golang-with-csharp 找到。
如何在 C# 中調(diào)用 Golang 函數(shù)?
Go 語(yǔ)言提供了 CGO 機(jī)制,使得能夠在 Go 代碼中直接調(diào)用 C 的庫(kù)函數(shù),此外還支持在 C 語(yǔ)言中調(diào)用 Go 函數(shù),非常強(qiáng)大。Golang 支持將 Go 函數(shù)導(dǎo)出給 C 語(yǔ)言使用,那么也同樣可以給 C# 使用。
CGO 環(huán)境搭建
要使用 CGO 特性,需要安裝 C/C 構(gòu)建工具鏈,在 macOS 和 Linux 下是要安裝好 GCC,在 Windows 下是需要安裝 MinGW 工具。如果你的電腦上已經(jīng)安裝好 GCC ,則可以跳過本小節(jié)。
關(guān)于 MinGW 的安裝網(wǎng)上已經(jīng)有很多教程,本篇將介紹一種更簡(jiǎn)單的方法來安裝 MinGW :通過安裝 QT 來部署 MinGW 到本機(jī)(該方法來自:ha666)。QT 的安裝包中自帶了 MinGW 環(huán)境,我們只要安裝 QT 開發(fā)包,那么附帶的 MinGW 環(huán)境就安裝好了。
QT 的下載地址可以在:http://download.qt.io/archive/qt/?中找到,目前(2020年1月28日)最新的版本是 5.14.1 ,Windows 版的下載地址是:qt-opensource-windows-x86-5.14.1.exe 。
如果你沒有且不想創(chuàng)建 QT 的網(wǎng)絡(luò)賬戶,那么在運(yùn)行 QT 的安裝文件之前,可以先斷開網(wǎng)絡(luò),這樣就不會(huì)出現(xiàn) QT 賬戶的注冊(cè)和登錄界面:
斷網(wǎng)狀態(tài)下,不會(huì)出現(xiàn)賬號(hào)注冊(cè)和登錄界面,直接“Next”即可。安裝過程中無需更改默認(rèn)的安裝目錄,在“選擇組件”頁(yè)面時(shí),勾選 MinGW 組件:
在“選擇組件”頁(yè)面中,勾選 MinGW 組件。在安裝完成之后,需要設(shè)置好環(huán)境變量 Go 編譯器才能找到 GCC 的安裝位置。如果你使用的軟件版本和我相同并且沒有更改默認(rèn)安裝位置,那么這個(gè)要添加到 PATH 變量中的目錄地址應(yīng)該是:C:\Qt\Qt5.14.0\Tools\mingw730_32\bin\
如果安裝正確并配置好了環(huán)境變量,那么在命令行中鍵入 gcc ,將會(huì)看到以下輸出:
Hello Golang
編寫 Golang 代碼,文件名為?main.go?。注意:雖然我們最終要生成動(dòng)態(tài)鏈接庫(kù),但是 main 函數(shù)仍是不可或缺的。
main.go接下來對(duì) Go 源文件進(jìn)行編譯,新建一個(gè)?make.bat?文件,填入一下指令并運(yùn)行:
make.bat命令成功后,我們會(huì)得到兩個(gè)文件:HelloGolang.Interop.h?和?HelloGolang.Interop.dll?。
使用 Visual Studio 新建 HelloGolang 控制臺(tái)應(yīng)用程序,并將生成的目標(biāo)平臺(tái)設(shè)置為?x86?。將?HelloGolang.Interop.dll?添加到項(xiàng)目中,并設(shè)置為“始終復(fù)制”:
HelloGolang.csproj在?Program.cs?文件中,使用?DllImport?導(dǎo)入外部方法并調(diào)用:
Program.cs運(yùn)行程序,那么將會(huì)在控制臺(tái)中看到以下輸出:
Hello Golang 輸出其中,第一行的?Hello World!?來自 C# 程序,第二行?Hello C#,I'm golang!?則來自 Go 程序。
總結(jié)
以上是生活随笔為你收集整理的go 调用其他文件函数_【C# 调用 Go 语言】0x1 Hello Golang的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 18款BJ212,柴油2.8T版本,离合
- 下一篇: 远程升级stm32程序_STM32IAP