【问题标题】:How can I call a Haskell function from Golang?如何从 Golang 调用 Haskell 函数?
【发布时间】:2019-12-20 15:06:25
【问题描述】:

我是一名 Python 开发人员,正在转向 Golang,所以对于这个菜鸟问题,我深表歉意。我负责获取一些我们有 python 绑定的 Haskell 代码,并使其可以从 Go 中调用。我有一个共享对象文件_foo.so,我想以某种方式将其导入 Go 并调用 la:

import (
    f "_foo.so"
)

func DoBar() {
    return f.Bar()
}

这可能吗?我什至不知道从哪里开始,但我希望伪代码能理解这个想法。

【问题讨论】:

  • 你必须通过 C,它们的共同点。有从 C 调用 Haskell 和从 Go 调用 C 的教程。
  • 我知道这并不总是一种选择,但如果您可以避免共享地址空间,而是以某种方式使用 IPC,那么您会省去一些痛苦。

标签: haskell go ffi


【解决方案1】:

正如cmets中已经提到的,你需要通过C。

好消息:您拥有的 python 绑定已经通过 C。这意味着 haskell 代码将所有必要的 API 公开为 C 函数,您只需找出 API 的外观并使用 cgo 调用它。您可能不需要了解有关 haskell 的任何信息。

假设您可以访问源代码,您应该查找*.c*.h 文件(通常位于cbits 文件夹中)。如果你不知道 C,那么请你的队友帮忙。

如果您无权访问代码,那么您可以尝试使用 python 绑定来猜测 C API。虽然会很困难。

【讨论】:

    【解决方案2】:

    我对这个问题很感兴趣,所以我实现了它。

    查看此回购:https://github.com/rusq/gohaskell/

    Go 程序调用 fibonacciHaskell 函数。

    【讨论】:

      猜你喜欢
      • 2017-03-12
      • 2011-06-28
      • 2022-10-01
      • 2017-01-23
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      相关资源
      最近更新 更多