搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > dotNET跨平台 > 【C# 调用 Go 语言】0x1 Hello Golang

【C# 调用 Go 语言】0x1 Hello Golang

dotNET跨平台 2020-05-20

C# 和 Golang 都不是世界上最好的语言。在不同的业务场景下,C# 和 Golang 各有所长。如果要编写一个网络程序,显然 Golang 更擅长,而如果要编写一个桌面 GUI 程序,那么 C# 简直不要太爽。我们完全可以将两者用在同一个项目中,各取所长。Golang 支持将源代码编译为动态链接库(dll),这让我们在 C# 调用 Golang 成为可能。

本篇代码可以在:https://gitee.com/coderbusy/golang-with-csharp 找到。

如何在 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 的网络账户,那么在运行 QT 的安装文件之前,可以先断开网络,这样就不会出现 QT 账户的注册和登录界面:


断网状态下,不会出现账号注册和登录界面,直接“Next”即可。


安装过程中无需更改默认的安装目录,在“选择组件”页面时,勾选 MinGW 组件:


【C# 调用 Go 语言】0x1 Hello Golang
在“选择组件”页面中,勾选 MinGW 组件。


如果安装正确并配置好了环境变量,那么在命令行中键入 gcc ,将会看到以下输出:


【C# 调用 Go 语言】0x1 Hello Golang


Hello Golang

编写 Golang 代码,文件名为 main.go 。注意:虽然我们最终要生成动态链接库,但是 main 函数仍是不可或缺的。


【C# 调用 Go 语言】0x1 Hello Golang
main.go


接下来对 Go 源文件进行编译,新建一个 make.bat 文件,填入一下指令并运行:


【C# 调用 Go 语言】0x1 Hello Golang
make.bat


命令成功后,我们会得到两个文件:HelloGolang.Interop.h 和 HelloGolang.Interop.dll 。

使用 Visual Studio 新建 HelloGolang 控制台应用程序,并将生成的目标平台设置为 x86 。将 HelloGolang.Interop.dll 添加到项目中,并设置为“始终复制”:


【C# 调用 Go 语言】0x1 Hello Golang
HelloGolang.csproj


在 Program.cs 文件中,使用 DllImport 导入外部方法并调用:


【C# 调用 Go 语言】0x1 Hello Golang
Program.cs


运行程序,那么将会在控制台中看到以下输出:

Hello Golang 输出

其中,第一行的 Hello World! 来自 C# 程序,第二行 Hello C#,I'm golang! 则来自 Go 程序。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【C# 调用 Go 语言】0x1 Hello Golang》的版权归原作者「dotNET跨平台」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注dotNET跨平台微信公众号

dotNET跨平台微信公众号:opendotnet

dotNET跨平台

手机扫描上方二维码即可关注dotNET跨平台微信公众号

dotNET跨平台最新文章

精品公众号随机推荐

上一篇 >>

SQL注入漏洞