An open API service indexing awesome lists of open source software.

https://github.com/wspl/go-quickjs

QuickJS bindings for Go
https://github.com/wspl/go-quickjs

go golang javascript quickjs

Last synced: 4 months ago
JSON representation

QuickJS bindings for Go

Awesome Lists containing this project

README

          

# 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)
```bash
wget https://raw.github.com/wspl/go-quickjs/master/install.sh && sh ./install.sh
```
Hello world:
```go
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:
```go
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](./LICENSE)