首页 > 后端开发 > Golang > 从零到合并:在 Go 中构建 JSON 重命名字段组件

从零到合并:在 Go 中构建 JSON 重命名字段组件

Barbara Streisand
发布: 2024-11-13 15:43:02
原创
559 人浏览过

From Zero to Merge: Building a JSON Renaming Field Component in Go

Instill-ai 简介

从事 Instill 的管道后端项目就像解决拼图一样?拼图——除了一些拼图不断改变名称!我的使命?创建一个可以重命名 JSON 字段而不产生冲突的组件。跟我一起分享我学习 Go、研究 Instill 组织良好的文档以及创建一个现已合并并准备就绪的解决方案的旅程! ?


挑战

Instill 需要一种动态重命名 JSON 数据结构中字段的方法。转折?我们必须处理重命名的字段可能与现有字段发生冲突的情况。如果没有冲突解决系统,混乱就会占据上风!

From Zero to Merge: Building a JSON Renaming Field Component in Go 灌输人工智能 / 管道后端

⇋ 用于 Instill VDP API 服务的 REST/gRPC 服务器

管道后端

From Zero to Merge: Building a JSON Renaming Field Component in Go

pipeline-backend 管理 Versatile Data 中的所有管道资源 管道 (VDP),用于简化来自 开始组件,经过AI/数据/应用组件,直至结束 组件。

概念

管道

?灌输 VDP,管道是一个 DAG(有向无环图),由 多个组件

加载中

组件

组件充当管道中的重要构建块。

更多请参见组件包文档 详情。

食谱

管道配方指定组件的配置方式及其使用方式 相互关联。

菜谱是用 YAML 语言定义的:

进入全屏模式 退出全屏模式
在 GitHub 上查看

说实话,我开始怀疑自己能否解决这个问题,但后来 Anni 留下了让我继续前进的完美信息。

From Zero to Merge: Building a JSON Renaming Field Component in Go

一旦我适应了,为这项任务精心设计了 JSON 模式的 ChunHao 就给我开了绿灯?开始编码。就这样,旅程开始了!


第 2️⃣ 步:设计解决方案

关键要求是:

  1. 动态重命名:应在不影响 JSON 结构的情况下重命名字段。
  2. 冲突检测:我们需要发现原始字段和重命名字段之间的任何冲突。
  3. 冲突解决:平稳的解决方案(例如附加后缀)可以防止名称冲突。

From Zero to Merge: Building a JSON Renaming Field Component in Go


步骤 3️⃣:构建组件

带着咖啡☕和勇气?,我开始编码。核心逻辑先睹为快:

映射字段

首先,我创建了一个映射系统来跟踪新旧字段名称。这是检测冲突的关键。

每当检测到冲突时,该函数都会将“_conflict”添加到新名称中。这是一个简单的技巧,可以确保我们的 JSON 字段保持唯一,最重要的是,彼此友好! ✌️

重命名字段

字段映射到位后,下一步是将它们应用到我们的 JSON 数据。

以下是将映射名称应用于 JSON 数据的逻辑。结果呢?我们的数据被整齐地重命名,冲突得到解决,结构完好无损。 ?

创建组件后,删除了草稿 PR 并得到了评论:

From Zero to Merge: Building a JSON Renaming Field Component in Go


步骤 4️⃣:测试和完善

在熟悉了 Instill 的测试方法并学习了如何创建有效的测试用例后,我继续进行下一步。

From Zero to Merge: Building a JSON Renaming Field Component in Go

测试时间! ?我编写的测试涵盖了从简单的重命名到具有嵌套 JSON 字段的复杂边缘情况的所有内容。每一轮测试都会带来进一步的改进。

在这里我想分享个人反思:测试是这个项目中最难的部分?‍?。有时我会想,“这个测试是否达到了预期的效果?”

就在那时,我遇到了lint问题

From Zero to Merge: Building a JSON Renaming Field Component in Go

他指出了问题,甚至提供了解决方案。我所要做的就是实现它,但这提醒我,即使是最小的细节也能让代码顺利运行。

一旦我克服了最初的障碍,测试就成了我的安全网。它让我有信心知道我的代码可以在不同的场景下工作?️‍♂️。它还向我表明,测试不仅仅是一个检查步骤,它是确保我的代码可靠且有弹性的一种方法。


第5️⃣步:CI检查和最终调整

完成测试后,我推送了代码,准备进行审核过程。然而,我们的 CI(持续集成)检查没有通过。 Anni 的评论温柔地提醒我仔细检查我的测试用例:

“嘿@AkashJana18,你能检查一下你的测试用例吗?我们的 CI 检查显示这里还没有通过。请先在本地进行测试,然后再推送到 PR。每当您推送提交时,我们都会触发检查,以便您可以在我们的工程师审查您的代码之前发现任何问题。谢谢!”

From Zero to Merge: Building a JSON Renaming Field Component in Go

那时我意识到我必须在提交之前在本地运行测试。春浩还补充道:

“请在请求审核之前运行并通过。运行 $ go test ./pkg/component/operator/json/v0/... 在本地检查。”

我快速在本地运行测试,发现问题并修复它们。

From Zero to Merge: Building a JSON Renaming Field Component in Go

From Zero to Merge: Building a JSON Renaming Field Component in Go
庆祝一下?

这个过程让我更加体会到本地测试的重要性,因为它确保了在提交审核之前一切都是可靠的。

合并之前,ChunHao 进行了最终审查,进行了一些调整,对测试配方进行了 QA 并更新了文档以反映新的更改。非常感谢安妮在整个过程中持续提供的支持——这带来了巨大的改变。 ?


?对协作过程的反思??‍??

我学到的最大的教训之一是协作和指导如何能够成就或毁掉一个项目。 Instill 的版主 Anni 和 ChunHao 在我迷失于 Go 语法或苦苦寻找正确方法时为我提供了所需的指导。我们共同努力,将一个复杂的问题变成了一个干净、实用的解决方案。

说实话,有些时候我感觉自己已经咬得太多了。但Anni不断的鼓励,加上春浩的明确指示,让我一直走在正轨上。


⏭️ 后续步骤和未来的改进

另一个步骤可能是将这种方法扩展到需要动态字段名称处理的管道的其他部分 - 因为谁不喜欢一点自动化⚙️?


?️ 工具和资源?

  1. Go 文档:用于深入了解 Go 语法并理解核心概念。
  2. Instill 文档:一个组织良好的资源金矿,可帮助您了解 Instill 管道。
  3. Go 测试框架:Go 中内置的测试包,用于编写单元测试,确保一切按预期工作,并与 CI 工具集成。
  4. Golangci-lint:Go linters 聚合器,用于在开发和 CI 检查期间识别问题并加强代码质量。

??‍??️ 我的学习

凭借 Instill 坚如磐石的文档、ChunHao 的指导以及 Anni 的道义支持,这个项目成为了一次奇妙的学习体验。我从对 Go 一无所知到实现了一个准备用于生产的全功能特性(并且我有合并的 PR 来证明这一点?)。

证明:

From Zero to Merge: Building a JSON Renaming Field Component in Go

以上是从零到合并:在 Go 中构建 JSON 重命名字段组件的详细内容。更多信息请关注PHP中文网其他相关文章!

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