Skip to main content

2 posts tagged with "go"

View All Tags

· 4 min read

最近在升级一个用 swift 写的 mac 平台的 app,其中的核心代码是用 Go 写的。 因此,需要在 swift 端调用 Go 代码。 这个倒是有现成的方案,就是将 Go 的 api 导出为 C api,然后在 swift 端调用 C 的 api 即可。

问题就出在跨语言调用这块,调用核心的 Go api 时,直接给抛出了一个 EXC_BAD_ACCESS 错误:

error: memory read failed for 0x0
Thread 7: EXC_BAD_ACCESS (code=1, address=0x4).

· 8 min read

事情的起因是这样的。最近有个 rust 的程序, 想在 rust 代码中读取 minio (一种开源且兼容 AWS s3 api 的对象存储)中的文件, 但是无奈 rust 的 api 很不完善 且似乎现在也没啥维护(有一年没有更新了)。而另外一边,minio 的 go api 开发十分活跃且是最优先支持的。 因此我就想能不能让 rust 调用 go 的 minio api 来实现 minio 中的对象读取。

虽然网络上面似乎也没太多相关的教程,但实际上也很容易做到。Rust 是一门面向底层开发的语言,其提供来很好的与 C 语言的互操作能力。 因此可以将 Go 代码中的相关函数导出为 C 语言的头文件声明,然后让 rust 像调用 C 一样间接地调用 Go 代码。