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》。
登录后查看全文
热门项目推荐
相关项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112
热门内容推荐
最新内容推荐
项目优选
收起
暂无描述
Dockerfile
733
4.75 K
Ascend Extension for PyTorch
Python
618
795
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
395
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.01 K
1.01 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.18 K
152
deepin linux kernel
C
29
16
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
145
237
暂无简介
Dart
983
252
昇腾LLM分布式训练框架
Python
166
198
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.68 K
989