JS
JS包为在Go中运行Javascript提供了一个共同的接口,使其在一致的环境中运行。
例子
V8
package main
import (
"context"
"fmt"
"os"
"github.com/livebud/js"
v8 "github.com/livebud/js/v8"
)
func main() {
vm, _ := v8.Load(&js.Console{
Log: os.Stdout,
Error: os.Stderr,
})
defer vm.Close()
ctx := context.Background()
vm.Evaluate(ctx, "math.js", `const multiply = (a, b) => a * b`)
value, _ := vm.Evaluate(ctx, "run.js", "multiply(3, 2)")
fmt.Println(value)
}
Goja
package main
import (
"context"
"fmt"
"os"
"github.com/livebud/js"
"github.com/livebud/js/goja"
)
func main() {
vm := goja.New(&js.Console{
Log: os.Stdout,
Error: os.Stderr,
})
ctx := context.Background()
vm.Evaluate(ctx, "math.js", `const multiply = (a, b) => a * b`)
value, _ := vm.Evaluate(ctx, "run.js", "multiply(3, 2)")
fmt.Println(value)
}
注意:这个包仍然是一个正在进行的工作。请参阅问题,了解需要完成的工作。
目前支持的Javascript虚拟机
目标
- 可更换的JS VMs:可用的虚拟机各有其优点和缺点。你应该能够根据你的需求来交换虚拟机。
- 一致的运行时间:对于每一个虚拟机,都应该有一致的、经过良好测试的全局(例如:
console,setTimeout,URL),尽可能与网络的行为相匹配。