CandyJS:架起Golang和JavaScript透明之桥

jopen 10年前

CandyJS是意图创造一座Go语言和JavaScript引擎duktape之间完全透明的桥,通过使用反射技术在go-duktape之上建立一个语法糖库,允许用户执行任意代码(即插件)不需要编译它就可建立可扩展的应用程序。

Demo

asciicast

Features

Embeddable Ecmascript E5/E5.1 compliant engine (duktape).

ctx := candyjs.NewContext()  ctx.EvalString(`    function factorial(n) {      if (n === 0) return 1;          return n * factorial(n - 1);    }      print(factorial(10));  `)  //3628800

Call Go functions from JavaScript and vice versa.
ctx := candyjs.NewContext()  ctx.PushGlobalGoFunction("golangMultiply", func(a, b int) int {      return a * b  })    ctx.EvalString(`print(golangMultiply(5, 10));`) //50

Transparent interface between Go structs and JavaScript.
type MyStruct struct {      Number int  }    func (m *MyStruct) Multiply(x int) int {      return m.Number * x  }  ...  ctx := candyjs.NewContext()  ctx.PushGlobalStruct("golangStruct", &MyStruct{10})    ctx.EvalString(`print(golangStruct.number);`) //10  ctx.EvalString(`print(golangStruct.multiply(5));`) //50

项目主页:http://www.open-open.com/lib/view/home/1434460897005