main.go:
package main
import (
"context"
"fmt"
"github.com/d5/tengo/v2"
"github.com/robertkrimen/otto"
"time"
)
func Tengo_Sum(a int, b int) (int, error) {
// create a new Script instance
script := tengo.NewScript([]byte(`sum := a + b`))
// set values
_ = script.Add("a", a)
_ = script.Add("b", b)
// run the script
compiled, err := script.RunContext(context.Background())
if err != nil {
return 0, err
}
// retrieve values
sum := compiled.Get("sum")
return sum.Int(), nil
}
func Js_Sum(a int, b int) (int, error) {
vm := otto.New()
_ = vm.Set("a", a)
_ = vm.Set("b", b)
// 执行 JavaScript 代码
_, err := vm.Run(`
sum = a + b;
`)
if err != nil {
return 0, err
}
sumVal, err := vm.Get("sum")
if err != nil {
return 0, err
}
sum, err := sumVal.ToInteger()
if err != nil {
return 0, err
}
return int(sum), nil
}
func main() {
startT := time.Now()
sum, err := Tengo_Sum(1, 9)
if err != nil {
panic(err)
}
fmt.Printf("Tengo_Sum: sum:1+9=%d, 程序执行时间: %v
", sum, time.Since(startT))
startT = time.Now()
sum, err = Js_Sum(1, 9)
if err != nil {
panic(err)
}
fmt.Printf("Js_Sum: sum:1+9=%d, 程序执行时间: %v
", sum, time.Since(startT))
println("done.")
}
运行:
PS > go run main.go
Tengo_Sum: sum:1+9=10, 程序执行时间: 531.9µs
Js_Sum: sum:1+9=10, 程序执行时间: 1.099ms
done.
说明:
这个例子对比了在golang中嵌入tengo脚本,和嵌入javascript脚本的执行时间对比,使用的第三方库可能会有必定的影响,但基本的数量级应该是差不多的。
初步的结论是:tengo的执行效率的确 是挺高的,但javascript/python等生态会更好一些。具体的需要根据项目的实际需求来定。
tengo的生态还需要有待完善,但tengo自身已经能够实现许多的功能了,如果能够满足项目的实际需要,我的理解还是可以思考一下tengo的。
最后,放一个tengo官方网址上的benchmark结果,作为展示:

© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END


















- 最新
- 最热
只看作者