Skip to main content

3 posts tagged with "go"

View All Tags

wKevin

Go 怎么调用 Python?或者说 Python 怎么嵌入到 Go?—— 我要研究明白。

  • 方案 1:go -- RESTFul -- python
    • 需要用户起一个 python 进程的 http server 进程,并且定义 RESTFul API。
  • 方案 2:go -- rpc -- python
    • 可用 grpc 或其他 rpc,也是需要单独启动一个 python 进程并开启 rpc server,go 中代码作为 rpc client。
  • 方案 3:go -- cgo/内存共享 -- python(C-API)
    • python 的解释器绝大多数人都是使用官方的 CPython,内核和解释器是用 C 实现的,可以用 C 代码方便的调用。
    • go 又和 C 是天然搭档,通过标准库中的 cgo 组件可以无缝调用 C。
    • 此时 python core 作为动态库链接到 go 上。

RESTFul 和 RPC 都是网络调用方式,更适合高度解耦的场景,cgo 或直接内存共享则是效率优先。 —— 我打算先摸索一下方案 3。一通搜索,找到了一些好文章,再加上 10 天左右的实战摸索,总结以下要点:

下面依次展开描述图中 1、2、3:

wKevin

History

  • 2007, Google 创立
    • Robert Griesemer,参与开发 Java HotSpot 虚拟机;
    • Rob Pike,贝尔实验室 Unix 团队成员,参与的 Plan 9,Inferno OS, Limbo 语言;
    • Ken Thompson,贝尔实验室 Unix 团队成员,C 语言、Unix 和 Plan 9 的创始人之一
  • 2008,创建了一个 gcc 前端
  • 2009.10.30, Rob Pike 对外宣称 Go ,并使用 BSD 开源
  • 2012 年 3 月,Go1.0 正式发布