首页 > 后端开发 > Golang > 为什么我们为 Golang 黑客马拉松构建迷你语言

为什么我们为 Golang 黑客马拉松构建迷你语言

Mary-Kate Olsen
发布: 2024-11-30 20:48:22
原创
250 人浏览过

又是黑客马拉松?

到目前为止,我已经参加了9 场黑客马拉松,其中一场是国际比赛,甚至在4 场比赛中获胜。话又说回来,当我的学弟 Dhruv 和 Tushar 告诉我关于 Golang Specific 的黑客马拉松时,我把 Harsh 也拉了过来,因为为什么不呢。不仅仅是 Harsh,我还拉了我们 Point Blank 团队的 40 个人一起参加,这最终让黑客马拉松变成了我们自己的内部竞赛,哈哈。

我们团队中的所有人GoGoingGone(lmao)都有使用 Golang 的良好经验,但我们想做的不仅仅是构建另一个工具。我们想要创新。就在那时,这个想法突然出现——让我们构建一种迷你语言来定义动态、可配置的数据管道。

介绍

我是 Akash Singh,来自班加罗尔的三年级工程专业学生和开源贡献者。
这是我的 LinkedIn、GitHub 和 Twitter

Why we Built a Mini-Language for a Golang Hackathon

我在网上的名字是SkySingh04。

介绍分形

Fractal 最初是一种数据处理工具,用于从遗留系统(例如 SQL 数据库和 CSV 文件)无缝迁移到现代平台,例如 MongoDBAWS S3。但我们想要的不仅仅是另一个 ETL 工具。我们的想法是使其高度灵活且用户友好,允许用户使用简单的声明性语法(一种迷你语言)定义验证转换规则在工具内。

为什么是迷你语言?

我们观察到数据管道空间中的大多数工具都依赖于严格的配置或自定义脚本。这种方法通常需要大量的编程专业知识,这限制了非开发人员的可访问性。声明性迷你语言提供:

  1. 简单性:用户以直观、人类可读的格式定义规则。
  2. 灵活性:它适应广泛的用例,从基本验证到复杂转换。
  3. 可扩展性:迷你语言可以随着新需求的出现而发展。

这种迷你语言并不是要重新发明轮子,而是要提供一个抽象来简化数据转换和验证。

当这与简单的 yaml 文件配置相结合时,我们认为我们已经达到了目标,即创建一个易于配置的数据管道,可以大规模地将数据从一个源处理到另一个源。

Why we Built a Mini-Language for a Golang Hackathon

核心:验证和转换语法

我们将语法设计得简单而富有表现力,重点关注两个主要操作:

  1. 验证规则 这些确保传入的数据在进一步处理之前满足特定的质量标准。例如:
   FIELD("age") TYPE(INT) RANGE(18, 65)
   FIELD("email") MATCHES(EMAIL_REGEX)
   FIELD("status") IN ("active", "inactive")
登录后复制
  1. 转换规则 这些可以实现数据丰富或重组。例如:
   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 和即兴演奏!

在黑客马拉松上构建分形

黑客马拉松不仅仅是为了创建迷你语言。我们还必须建设周围的基础设施,确保分形:

  1. 可扩展:支持多种输入/输出格式,如 JSON、CSV、SQL 数据库和消息队列。
  2. 可配置:基于 YAML 的配置,用于定义管道工作流程,无缝集成迷你语言。
  3. 鲁棒:使用 LOG_AND_CONTINUE 或 STOP 等选项优雅地处理错误。

我们将工作分为四个模块:

  • 迷你语言实现:设计词法分析器和解析器来解释自定义语法。
  • 数据集成:添加对常见数据源和目标的支持。
  • 管道引擎:编排验证、转换和错误处理。
  • CLI 接口:提供用于定义和运行管道的简单接口。

我们面临的挑战

  1. 设计语法 在简单性和灵活性之间取得平衡是一个挑战。我们迭代了多次来最终确定语法。
  2. 构建解析器 在 Golang 中实现自定义词法分析器和解析器非常耗时,但回报丰厚。
  3. 实时反馈 确保迷你语言提供有意义的错误消息来指导用户对于可用性至关重要。
  4. 时间限制 在黑客马拉松中构建如此规模的工具需要精确的规划和无缝的协调。

之后发生了什么?

尽管我们在 GO for GOFR 黑客马拉松中表现出色,但我们在最终评估过程中面临着严峻的挑战。除了我们录制的演示之外,评委还要求进行现场演示,不幸的是,我们在现场运行期间遇到了解析器逻辑中的意外错误。考虑到在短短 24 小时内构建强大的自定义解析器的复杂性,这是一项雄心勃勃的开发功能,虽然我们录制的演示展示了其功能,但在时间限制下实现 100% 的准确性被证明是困难的。这个小问题最终让我们失去了最高奖项。然而,我们的努力仍然受到高度评价,我们团队清晰的愿景和引人注目的交付为我们赢得了“最佳推介”的荣誉,凸显了我们的潜力和独创性。

那么黑客马拉松是吧?

黑客马拉松通常是关于突破界限和探索未知领域。 Fractal 是我们重新定义数据处理工具工作方式的尝试——让它们变得可访问、模块化且对开发人员友好。

我找不到比这更志同道合的人与我一起工作了,毫无疑问,他们是绝对最好、最勤奋的队友。期待是什么让我参加下一次黑客马拉松,我敢说,基于 RUST 的黑客马拉松吗? xD

查看 GitHub 上的 Fractal

Why we Built a Mini-Language for a Golang Hackathon 天空辛格04 / 分形

灵活、可配置的数据处理工具

分形

Fractal 是一个灵活的、可配置的数据处理工具,使用 GoFrGolang 构建。 Fractal 旨在处理来自多个来源的数据摄取,应用强大的转换和验证,并将输出传递到广泛的目的地。借助 Fractal,您可以自动化复杂的数据工作流程,而无需管理低级细节 以下是在项目中设置新集成的文档:

验证和转换规则的自定义语法文档

1。概述

自定义语法使用户能够:

  1. 验证传入数据以确保其满足预定义条件。
  2. 转换数据字段以适应所需的格式、结构或要求。
  3. 为数据处理管道定义灵活的错误处理策略。

可以为任何数据源或目的地编写规则,例如 JSONYAMLCSVSQL 数据库消息代理,或云服务


2。验证规则

验证规则确保数据满足特定的质量和完整性要求。

在 GitHub 上查看



推介材料:Drive Link

或者自己尝试一下,让我们知道您的想法!

Why we Built a Mini-Language for a Golang Hackathon

以上是为什么我们为 Golang 黑客马拉松构建迷你语言的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板