Tengo语言:为Go打造的轻量级动态脚本语言
2026-01-20 01:13:46作者:劳婵绚Shirley
项目介绍
Tengo 是一款专为Go语言设计的小型、动态、快速且安全的脚本语言。它不仅具备高效的编译和执行能力,还拥有简洁易读的语法,使得开发者能够轻松编写和维护脚本代码。Tengo的核心优势在于其基于栈的虚拟机,完全由Go语言实现,无需外部依赖或cgo,确保了代码的安全性和执行效率。
/* The Tengo Language */
fmt := import("fmt")
each := func(seq, fn) {
for x in seq { fn(x) }
}
sum := func(init, seq) {
each(seq, func(x) { init += x })
return init
}
fmt.println(sum(0, [1, 2, 3])) // "6"
fmt.println(sum("", [1, 2, 3])) // "123"
在 Tengo Playground 中体验上述代码
项目技术分析
Tengo语言的核心技术在于其独特的虚拟机设计。该虚拟机采用栈结构,能够高效地执行编译后的字节码,从而实现快速的脚本执行。此外,Tengo支持动态类型和类型强制转换,使得开发者能够灵活地处理不同类型的数据。高阶函数和闭包的引入,进一步增强了语言的表达能力。
项目及技术应用场景
Tengo语言的应用场景非常广泛,特别适合以下几种情况:
- 规则引擎:Tengo的动态特性和高效执行能力使其成为构建复杂规则引擎的理想选择。
- 状态机:通过Tengo脚本,可以轻松实现状态机的逻辑,简化状态管理的复杂性。
- 数据管道:在数据处理流程中,Tengo可以作为中间脚本语言,灵活处理数据转换和过滤。
- 转译器:Tengo还支持与其他语言的互操作,可以用于实现简单的转译功能。
项目特点
- 简洁易读的语法:Tengo的语法设计简洁明了,易于理解和维护。
- 动态类型与类型强制转换:支持动态类型和类型强制转换,使得数据处理更加灵活。
- 高阶函数与闭包:支持高阶函数和闭包,增强了代码的复用性和表达能力。
- 安全嵌入与扩展:Tengo可以安全地嵌入到Go应用中,并支持扩展,满足不同场景的需求。
- 独立运行与REPL:除了嵌入到Go应用中,Tengo还可以作为独立的脚本语言运行,并提供REPL环境,方便开发者进行交互式编程。
快速开始
go get github.com/d5/tengo/v2
以下是一个简单的Go示例代码,展示了如何编译和运行Tengo脚本,并传递输入输出值:
package main
import (
"context"
"fmt"
"github.com/d5/tengo/v2"
)
func main() {
// 创建一个新的Script实例
script := tengo.NewScript([]byte(
`each := func(seq, fn) {
for x in seq { fn(x) }
}
sum := 0
mul := 1
each([a, b, c, d], func(x) {
sum += x
mul *= x
})`))
// 设置值
_ = script.Add("a", 1)
_ = script.Add("b", 9)
_ = script.Add("c", 8)
_ = script.Add("d", 4)
// 运行脚本
compiled, err := script.RunContext(context.Background())
if err != nil {
panic(err)
}
// 获取值
sum := compiled.Get("sum")
mul := compiled.Get("mul")
fmt.Println(sum, mul) // "22 288"
}
或者,如果你只需要评估一个简单的表达式,可以使用 Eval 函数:
res, err := tengo.Eval(ctx,
`input ? "success" : "fail"`,
map[string]interface{}{"input": 1})
if err != nil {
panic(err)
}
fmt.Println(res) // "success"
参考资料
为什么叫Tengo? 这个名字来源于村上春树的小说《1Q84》。
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
537
3.75 K
暂无简介
Dart
773
191
Ascend Extension for PyTorch
Python
343
406
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.34 K
755
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
1.07 K
97
React Native鸿蒙化仓库
JavaScript
303
355
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
337
179
AscendNPU-IR
C++
86
141
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
986
248