我能否编写Go语言库以供其他语言使用?

4

我正在编写一个相对较小但不简单的网络库,将至少使用C、Java、Python、Ruby和C#。有没有办法像从C一样制作出与其他语言的Go绑定?如果没有,还有其他方法吗?


1
如果你想让库可以与其他语言共享,那么最好用另一种语言编写它。你可以从C(和其他一些语言)中调用Go,但这并不美观,而且会带来很多麻烦,除非我别无选择,否则我不会使用从其他语言编写的Go库。你可以在这里阅读有关从C调用Go的信息:http://cheesesun.blogspot.com/2010/04/callbacks-in-cgo.html 。我认为你会在使用C#和Java时面临类似的问题,对于Python我不确定。 - Pete
1
你不能从其他语言链接到Go库。你只能在Go程序中使用cgoC调用Go。你的程序必须在Go运行时中运行。 - JimB
@JimB 除了C语言之外,还有哪些可供这类项目选择的编程语言? - Moonwalker
@JimB 我不能在其他语言中使用动态或静态链接库吗? - Moonwalker
是的,你可以这样做,但只有低级语言才能创建适合的API。此外还存在初始化问题。潜在地,你可以使用C、C++或D(我用以上所有语言编写过这样的库)。 - kriss
显示剩余5条评论
2个回答

3

目前,您无法使用Go编写可在其他语言中使用的库。Go具有运行时环境,可以为您执行许多操作(例如调度go-routines、收集垃圾)。此运行时环境是在假定其控制整个程序的情况下编写的。如果来自另一种语言的程序要使用Go代码,则该假设不成立,因为Go库无法影响使用它的二进制文件。


0

我想象一个JSON服务可以实现你所描述的功能。请查看json测试以获取一个简单的例子。无论你使用什么语言来设置和获取应用程序中的数据都没有关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接