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
- Host: GitHub
- URL: https://github.com/wspl/go-quickjs
- Owner: wspl
- License: mit
- Created: 2019-07-14T07:05:10.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2022-08-26T03:46:16.000Z (over 3 years ago)
- Last Synced: 2024-11-14T13:37:24.671Z (over 1 year ago)
- Topics: go, golang, javascript, quickjs
- Language: Go
- Homepage:
- Size: 1.55 MB
- Stars: 157
- Watchers: 7
- Forks: 21
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - go-quickjs
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)