0

0

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

聖光之護

聖光之護

发布时间:2024-11-29 16:57:37

|

1125人浏览过

|

来源于dev.to

转载

又是黑客马拉松?

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

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

介绍

我是 akash singh,来自班加罗尔的三年级工程专业学生和开源贡献者。
这是我的 linkedin、github 和 twitter

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

我在网上的名字是skysingh04。

介绍分形

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

为什么是迷你语言?

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

立即学习go语言免费学习笔记(深入)”;

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

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

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

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

核心:验证和转换语法

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

  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)

这种抽象允许用户以最小的努力处理不同的数据集,从而提高生产力并降低复杂性。

DeepL Write
DeepL Write

DeepL推出的AI驱动的写作助手,在几秒钟内完善你的写作

下载

在弄清楚如何制作这种语言的词法分析器和解析器的过程中,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

为什么我们为 Golang 黑客马拉松构建迷你语言 天空辛格04 / 分形

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

分形

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

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

1。概述

自定义语法使用户能够:

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

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


2。验证规则

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

在 github 上查看



推介材料:drive link

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

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

180

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

229

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

342

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

209

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

394

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

220

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

192

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

355

2025.06.17

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 3万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号