在Go中嵌入脚本语言

时间:2014-12-16 03:00:44

标签: scripting go embedding

是否可以在Go中嵌入一种语言?举例说明嵌入式语言如何访问Go的变量。我需要它来在我的应用程序中创建插件。

5 个答案:

答案 0 :(得分:22)

是的,我在此处找到了列表:https://github.com/golang/go/wiki/Projects#virtual-machines-and-languages

  • Gelo - 可扩展,可嵌入的口译员
  • GoForth - 一个简单的Forth解析器
  • GoLightly - 具有运行时可配置指令集的灵活轻量级虚拟机
  • Golog - Go中的Prolog翻译
  • Minima - Go中实施的一种语言。
  • RubyGoLightly - TinyRb to Go的实验端口
  • forego - Forth虚拟机
  • go-python - 为CPython C-API绑定
  • GoEmPHP - 此软件包是为将PHP嵌入Go而构建的。
  • goenv - 创建一个隔离的环境,您可以在其中安装Go包,二进制文件甚至C库。非常类似于Python的virtualenv。
  • golemon - Lemon解析器生成器的端口
  • goll1e - Go编程语言的LL(1)解析器生成器。
  • golua - 转到LUA的C API包装器
  • golua-fork - GoLua的一个分支,适用于当前版本的Go
  • gotcl - Go中的Tcl解释器
  • meme - Go中的计划口译员
  • ngaro - 运行retroForth图像的ngaro虚拟机
  • otto - 在Go
  • 中原生编写的JavaScript解析器和解释器
  • monkey - 在Go程序中嵌入Mozilla JavaScript引擎SpiderMonkey。
  • go-v8 - 针对Go的V8 JavaScript引擎绑定
  • gomruby - 用于Go的mruby(迷你Ruby)绑定
  • LispEx - 用Go编写的一种Lisp方言,用于支持并发编程。

答案 1 :(得分:4)

goja - Go中的ECMAScript 5.1(+)实现。

答案 2 :(得分:3)

首先,我会解释cgo。 Go提供API以将值导出为C语言。

http://golang.org/cmd/cgo/

例如,您可以将字符串导出为char*,如下所示。

package main

/*
#include <stdio.h>
static void myputs(char* s) {
    puts(s);
}
*/
import "C"

func main() {
    s := "hello world"
    C.myputs(C.CString(s))
}

所以你需要编写函数来访问C库。但是有一些软件包可以使用脚本语言。参见:

https://github.com/mattn/go-mruby

https://github.com/mattn/go-v8

或者如果您不想使用C语言。你可以使用像otto

这样的原生语言

https://github.com/robertkrimen/otto

https://github.com/mattn/anko

答案 3 :(得分:1)

一个非常好用但上面没有提到的:gopher-lua,一个 Lua 5.1 虚拟机:

L := lua.NewState()
defer L.Close()
_ = L.DoString(`print("hello")`);
_ = L.DoFile("hello.lua");

答案 4 :(得分:0)

我刚刚发现了这个really exhaustive list,因此认为与像我这样的人一起分享会很好。