ホームページ > バックエンド開発 > Golang > ゼロからマージまで: Go での JSON 名前変更フィールド コンポーネントの構築

ゼロからマージまで: Go での JSON 名前変更フィールド コンポーネントの構築

Barbara Streisand
リリース: 2024-11-13 15:43:02
オリジナル
561 人が閲覧しました

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 (有向非巡回グラフ) で構成されます。 複数のコンポーネントの。

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
読み込み中

コンポーネント

コンポーネントは、パイプライン内の重要な構成要素として機能します。

詳細については、コンポーネント パッケージのドキュメントを参照してください 詳細。

レシピ

パイプライン レシピ は、コンポーネントの構成方法とコンポーネントの状態を指定します。 相互接続されています。

レシピは YAML 言語で定義されます:

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
全画面モードに入る 全画面モードを終了します
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️⃣: コンポーネントを構築する

コーヒー☕と勇気を武器に、コーディングに取り掛かりました。以下にコアロジックの概要を示します:

フィールドのマッピング

まず、古いフィールド名と新しいフィールド名を追跡するためのマッピング システムを作成しました。これは競合を検出するための鍵でした。

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

競合が検出されるたびに、関数は新しい名前に「_conflict」を追加します。これは、JSON フィールドが一意であり、最も重要なことに、相互にフレンドリーであることを保証する簡単なトリックです。 ✌️

フィールド名の変更

フィールド マッピングを設定したら、次のステップはそれらを JSON データに適用することでした。

variable
  <span># pipeline input fields</span>
output:
  <span># pipeline output fields</span>
component:
  <component-id>:
    type: <component-definition-id>
    task: <task-id>
    input:
      <span># values for the input fields</span>
    condition: <condition> <span># conditional statement to execute or bypass the</span>
ログイン後にコピー

これは、マッピングされた名前を 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 フィールドを使用した複雑なエッジケースまで、あらゆるものをカバーするテストを作成しました。テストの各ラウンドでさらなる改良が行われました。

func mapFields(fields map[string]string) map[string]string {
    newFieldMap := make(map[string]string)
    for oldName, newName := range fields {
        // Check for conflict
        if _, exists := newFieldMap[newName]; exists {
            newName += "_conflict" // Add suffix for conflicts
        }
        newFieldMap[oldName] = newName
    }
    return newFieldMap
}
ログイン後にコピー

ここで 個人的な感想 を共有したいと思います。テストはこのプロジェクトで最も困難な部分でした ?‍?。 「このテストは本来の目的を果たしているのだろうか?」と思うことがありました。

ちょうどそのとき、糸くずの問題に遭遇しました—

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

そのとき、送信する前にテストをローカルで実行する必要があることに気づきました。 ChunHao は次のようにも追加しました:

「レビューをリクエストする前に実行して合格してください。$ 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 して、新しい変更を反映するようにドキュメントを更新しました。プロセス全体を通して継続的にサポートしてくれた Anni に感謝します。それは大きな変化をもたらしました。 ?


?共同作業のプロセスを振り返る ??‍??

私が学んだ最大の教訓の 1 つは、コラボレーションと指導がプロジェクトの成否を左右するということでした。 Instill のモデレーターである Anni と ChunHao は、私が Go 構文で迷ったとき、または正しいアプローチで悩んでいたときに、必要なガイダンスを提供してくれました。私たちは協力して、複雑な問題をクリーンで機能的なソリューションに変えました。

正直に言うと、噛み切れないほど噛みちぎったように感じた瞬間がありました。しかし、アンニからの絶え間ない励ましとチュンハオからの明確な指示のおかげで、私は順調に進むことができました。


⏭️ 次のステップと今後の改善点

もう 1 つのステップは、このアプローチを動的なフィールド名の処理を必要とするパイプラインの他の部分に拡張することです。なぜなら、少しの自動化が嫌いな人はいないからです⚙️?


?️ ツールとリソース ?

  1. Go ドキュメント: Go 構文を詳しく理解し、中心となる概念を理解するためのものです。
  2. Instill Docs: Instill パイプラインを理解するための、よく整理されたリソースの宝庫です。
  3. Go テスト フレームワーク: 単体テストを作成し、すべてが期待どおりに動作することを確認し、CI ツールと統合するための Go の組み込みテスト パッケージ。
  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 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート