Skip to content

quickjs-zh/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

About

QuickJS bindings for Go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 73.0%
  • Go 25.9%
  • Shell 1.1%