为什么我们为 Golang 黑客马拉松构建迷你语言
又是黑客马拉松?
到目前为止,我已经参加了9 场黑客马拉松,其中一场是国际比赛,甚至在4 场比赛中获胜。话又说回来,当我的学弟 Dhruv 和 Tushar 告诉我关于 Golang Specific 的黑客马拉松时,我把 Harsh 也拉了过来,因为为什么不呢。不仅仅是 Harsh,我还拉了我们 Point Blank 团队的 40 个人一起参加,这最终让黑客马拉松变成了我们自己的内部竞赛,哈哈。
我们团队中的所有人GoGoingGone(lmao)都有使用 Golang 的良好经验,但我们想做的不仅仅是构建另一个工具。我们想要创新。就在那时,这个想法突然出现——让我们构建一种迷你语言来定义动态、可配置的数据管道。
介绍
我是 Akash Singh,来自班加罗尔的三年级工程专业学生和开源贡献者。
这是我的 LinkedIn、GitHub 和 Twitter
我在网上的名字是SkySingh04。
介绍分形
Fractal 最初是一种数据处理工具,用于从遗留系统(例如 SQL 数据库和 CSV 文件)无缝迁移到现代平台,例如 MongoDB 或 AWS S3。但我们想要的不仅仅是另一个 ETL 工具。我们的想法是使其高度灵活且用户友好,允许用户使用简单的声明性语法(一种迷你语言)定义验证和转换规则在工具内。
为什么是迷你语言?
我们观察到数据管道空间中的大多数工具都依赖于严格的配置或自定义脚本。这种方法通常需要大量的编程专业知识,这限制了非开发人员的可访问性。声明性迷你语言提供:
- 简单性:用户以直观、人类可读的格式定义规则。
- 灵活性:它适应广泛的用例,从基本验证到复杂转换。
- 可扩展性:迷你语言可以随着新需求的出现而发展。
这种迷你语言并不是要重新发明轮子,而是要提供一个抽象来简化数据转换和验证。
当这与简单的 yaml 文件配置相结合时,我们认为我们已经达到了目标,即创建一个易于配置的数据管道,可以大规模地将数据从一个源处理到另一个源。
核心:验证和转换语法
我们将语法设计得简单而富有表现力,重点关注两个主要操作:
- 验证规则 这些确保传入的数据在进一步处理之前满足特定的质量标准。例如:
FIELD("age") TYPE(INT) RANGE(18, 65) FIELD("email") MATCHES(EMAIL_REGEX) FIELD("status") IN ("active", "inactive")
- 转换规则 这些可以实现数据丰富或重组。例如:
RENAME("old_field", "new_field") MAP("status", {"0": "inactive", "1": "active"}) ADD_FIELD("processed_at", CURRENT_TIME()) IF FIELD("age") > 50 THEN ADD_FIELD("senior_discount", TRUE)
这种抽象允许用户以最小的努力处理不同的数据集,从而提高生产力并降低复杂性。
在弄清楚如何制作这种语言的词法分析器和解析器的过程中,GoFr.dev 的团队带我们上楼参加了一次减压课程,其中充满了深夜的 sharayis 和即兴演奏!
在黑客马拉松上构建分形
黑客马拉松不仅仅是为了创建迷你语言。我们还必须建设周围的基础设施,确保分形:
- 可扩展:支持多种输入/输出格式,如 JSON、CSV、SQL 数据库和消息队列。
- 可配置:基于 YAML 的配置,用于定义管道工作流程,无缝集成迷你语言。
- 鲁棒:使用 LOG_AND_CONTINUE 或 STOP 等选项优雅地处理错误。
我们将工作分为四个模块:
- 迷你语言实现:设计词法分析器和解析器来解释自定义语法。
- 数据集成:添加对常见数据源和目标的支持。
- 管道引擎:编排验证、转换和错误处理。
- CLI 接口:提供用于定义和运行管道的简单接口。
我们面临的挑战
- 设计语法 在简单性和灵活性之间取得平衡是一个挑战。我们迭代了多次来最终确定语法。
- 构建解析器 在 Golang 中实现自定义词法分析器和解析器非常耗时,但回报丰厚。
- 实时反馈 确保迷你语言提供有意义的错误消息来指导用户对于可用性至关重要。
- 时间限制 在黑客马拉松中构建如此规模的工具需要精确的规划和无缝的协调。
之后发生了什么?
尽管我们在 GO for GOFR 黑客马拉松中表现出色,但我们在最终评估过程中面临着严峻的挑战。除了我们录制的演示之外,评委还要求进行现场演示,不幸的是,我们在现场运行期间遇到了解析器逻辑中的意外错误。考虑到在短短 24 小时内构建强大的自定义解析器的复杂性,这是一项雄心勃勃的开发功能,虽然我们录制的演示展示了其功能,但在时间限制下实现 100% 的准确性被证明是困难的。这个小问题最终让我们失去了最高奖项。然而,我们的努力仍然受到高度评价,我们团队清晰的愿景和引人注目的交付为我们赢得了“最佳推介”的荣誉,凸显了我们的潜力和独创性。
那么黑客马拉松是吧?
黑客马拉松通常是关于突破界限和探索未知领域。 Fractal 是我们重新定义数据处理工具工作方式的尝试——让它们变得可访问、模块化且对开发人员友好。
我找不到比这更志同道合的人与我一起工作了,毫无疑问,他们是绝对最好、最勤奋的队友。期待是什么让我参加下一次黑客马拉松,我敢说,基于 RUST 的黑客马拉松吗? xD
查看 GitHub 上的 Fractal
天空辛格04
/
分形
灵活、可配置的数据处理工具
分形
Fractal 是一个灵活的、可配置的数据处理工具,使用 GoFr 和 Golang 构建。 Fractal 旨在处理来自多个来源的数据摄取,应用强大的转换和验证,并将输出传递到广泛的目的地。借助 Fractal,您可以自动化复杂的数据工作流程,而无需管理低级细节 以下是在项目中设置新集成的文档:
验证和转换规则的自定义语法文档
1。概述
自定义语法使用户能够:
- 验证传入数据以确保其满足预定义条件。
- 转换数据字段以适应所需的格式、结构或要求。
- 为数据处理管道定义灵活的错误处理策略。
可以为任何数据源或目的地编写规则,例如 JSON、YAML、CSV、SQL 数据库、消息代理,或云服务。
2。验证规则
验证规则确保数据满足特定的质量和完整性要求。
推介材料:Drive Link
或者自己尝试一下,让我们知道您的想法!
以上是为什么我们为 Golang 黑客马拉松构建迷你语言的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Go语言在构建高效且可扩展的系统中表现出色,其优势包括:1.高性能:编译成机器码,运行速度快;2.并发编程:通过goroutines和channels简化多任务处理;3.简洁性:语法简洁,降低学习和维护成本;4.跨平台:支持跨平台编译,方便部署。

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。 Golang以其并发模型和高效性能着称,Python则以简洁语法和丰富库生态系统着称。

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

Golang和C 在性能竞赛中的表现各有优势:1)Golang适合高并发和快速开发,2)C 提供更高性能和细粒度控制。选择应基于项目需求和团队技术栈。

GoimpactsdevelopmentPositationalityThroughSpeed,效率和模拟性。1)速度:gocompilesquicklyandrunseff,ifealforlargeprojects.2)效率:效率:ITScomprehenSevestAndArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增强开发的简单性:3)SimpleflovelmentIcties:3)简单性。

C 更适合需要直接控制硬件资源和高性能优化的场景,而Golang更适合需要快速开发和高并发处理的场景。1.C 的优势在于其接近硬件的特性和高度的优化能力,适合游戏开发等高性能需求。2.Golang的优势在于其简洁的语法和天然的并发支持,适合高并发服务开发。

Golang和C 在性能上的差异主要体现在内存管理、编译优化和运行时效率等方面。1)Golang的垃圾回收机制方便但可能影响性能,2)C 的手动内存管理和编译器优化在递归计算中表现更为高效。
