- Notifications
You must be signed in to change notification settings - Fork97
[abandoned] Duktape JavaScript engine bindings for Go
License
olebedev/go-duktape
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Duktape is a thin, embeddable javascript engine.Most of theapi is implemented.The exceptions are listedhere.
The package is fully go-getable, no need to install any external C libraries.
So, just typego get gopkg.in/olebedev/go-duktape.v3
to install.
package mainimport"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()}
Bindings between Go and Javascript contexts are not fully functional.However, binding a Go function to the Javascript context is available:
package mainimport"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*.goGo lang Go!$
There is a method to inject timers to the global scope:
package mainimport"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*.gofirst stepsecond step$
Also you canFlushTimers()
.
Installgo get gopkg.in/olebedev/go-duktape.v3/...
.
Execute file.js:$GOPATH/bin/go-duk file.js
.
prog | time |
---|---|
otto | 200.13s |
anko | 231.19s |
agora | 149.33s |
GopherLua | 8.39s |
go-duktape | 9.80s |
More details arehere.
The package is not fully tested, so be careful.
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
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Uh oh!
There was an error while loading.Please reload this page.