Skip to content

wspl/go-quickjs

Repository files navigation

go-quickjs

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.

Features

  • 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

Get Started

Install: (MacOS tested only)

wget https://raw.github.com/wspl/go-quickjs/master/install.sh && sh ./install.sh

Hello world:

package main

import "github.com/wspl/go-quickjs"

func main() {
	runtime := quickjs.NewJSRuntime()
	defer runtime.Free()
	context := runtime.NewContext()
	defer context.Free()

	ret, err := context.Eval("'Hello ' + 'World!'", "")
	if err != nil {
		println(err.Message())
	}
	println(ret.String())
}

Invoke Go function in JavaScript:

package main

import . "github.com/wspl/go-quickjs"

func main() {
	runtime := NewJSRuntime()
	defer runtime.Free()
	context := runtime.NewContext()
	defer context.Free()

	fn := context.NewGoFunction(func(args []*JSValue, this *JSValue) (*JSValue, *JSError) {
		println("Invoked!")
		return context.NewString("Hello World"), nil
	})
	fn.Value().Expose("hello")
	ret, err := context.Eval("hello()", "")
	if err != nil {
		println(err.Message())
	}
	println(ret.String())
}

TODOs

  • Test cases
  • Module support
  • Fix bugs

License

MIT

Releases

No releases published

Packages

No packages published