You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Oct 29, 2021. It is now read-only.
Duktape is a thin, embeddable javascript engine.
Most of the api is implemented.
The exceptions are listed here.
Usage
The package is fully go-getable, no need to install any external C libraries.
So, just type go get gopkg.in/olebedev/go-duktape.v3 to install.
package main
import"fmt"import"gopkg.in/olebedev/go-duktape.v3"funcmain() {
ctx:=duktape.New()
ctx.PevalString(`2 + 3`)
result:=ctx.GetNumber(-1)
ctx.Pop()
fmt.Println("result is:", result)
// To prevent memory leaks, don't forget to clean up after// yourself when you're done using a context.ctx.DestroyHeap()
}
Go specific notes
Bindings between Go and Javascript contexts are not fully functional.
However, binding a Go function to the Javascript context is available:
package main
import"fmt"import"gopkg.in/olebedev/go-duktape.v3"funcmain() {
ctx:=duktape.New()
ctx.PushGlobalGoFunction("log", func(c*duktape.Context) int {
fmt.Println(c.SafeToString(-1))
return0
})
ctx.PevalString(`log('Go lang Go!')`)
}
then run it.
$ go run *.go
Go lang Go!
$
Timers
There is a method to inject timers to the global scope:
package main
import"fmt"import"gopkg.in/olebedev/go-duktape.v3"funcmain() {
ctx:=duktape.New()
// Let's inject `setTimeout`, `setInterval`, `clearTimeout`,// `clearInterval` into global scope.ctx.PushTimers()
ch:=make(chanstring)
ctx.PushGlobalGoFunction("second", func(_*Context) int {
ch<-"second step"return0
})
ctx.PevalString(` setTimeout(second, 0); print('first step'); `)
fmt.Println(<-ch)
}
then run it
$ go run *.go
first step
second step
$
Also you can FlushTimers().
Command line tool
Install go get gopkg.in/olebedev/go-duktape.v3/....
Execute file.js: $GOPATH/bin/go-duk file.js.
Pull requests are welcome! Also, if you want to discuss something send a pull request with proposal and changes.
Convention: fork the repository and make changes on your fork in a feature branch.
About
[abandoned] Duktape JavaScript engine bindings for Go