QuickJS engine bindings for Go.
Warning: At present, both the original project quickjs and this project are still in the early stage of development. Please use this project carefully in the production environment.
- Evaluate script
- Evaluate bytecode in
[]byte - Compile script into bytecode in
[]byte - Simple exception throwing and catching
- Invoke Go function from JavaScript
- Operate JavaScript values and objects in Go
Install: (MacOS tested only)
wget https://raw.github.com/wspl/go-quickjs/master/install.sh && sh ./install.shHello world:
package main
import"github.com/wspl/go-quickjs"funcmain() {
runtime:=quickjs.NewJSRuntime()
deferruntime.Free()
context:=runtime.NewContext()
defercontext.Free()
ret, err:=context.Eval("'Hello ' + 'World!'", "")
iferr!=nil {
println(err.Message())
}
println(ret.String())
}Invoke Go function in JavaScript:
package main
import . "github.com/wspl/go-quickjs"funcmain() {
runtime:=NewJSRuntime()
deferruntime.Free()
context:=runtime.NewContext()
defercontext.Free()
fn:=context.NewGoFunction(func(args []*JSValue, this*JSValue) (*JSValue, *JSError) {
println("Invoked!")
returncontext.NewString("Hello World"), nil
})
fn.Value().Expose("hello")
ret, err:=context.Eval("hello()", "")
iferr!=nil {
println(err.Message())
}
println(ret.String())
}- Test cases
- Module support
- Fix bugs