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