Heim > Backend-Entwicklung > Golang > Von Null bis Zusammenführung: Erstellen einer JSON-Umbenennungsfeldkomponente in Go

Von Null bis Zusammenführung: Erstellen einer JSON-Umbenennungsfeldkomponente in Go

Barbara Streisand
Freigeben: 2024-11-13 15:43:02
Original
559 Leute haben es durchsucht

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

Einführung in Instill-ai

Die Arbeit am Pipeline-Backend-Projekt von Instill war wie das Lösen eines Puzzles? Puzzle – außer dass einige Teile ständig ihren Namen änderten! Meine Mission? So erstellen Sie eine Komponente, die JSON-Felder umbenennen kann, ohne dass Konflikte entstehen. Begleiten Sie mich auf meiner Reise durch das Erlernen von Go, das Studium der gut organisierten Dokumente von Instill und die Entwicklung einer Lösung, die jetzt zusammengeführt und einsatzbereit ist! ?


Die Herausforderung

Instill benötigte eine Möglichkeit, Felder in JSON-Datenstrukturen dynamisch umzubenennen. Die Wendung? Wir mussten uns mit Fällen befassen, in denen ein umbenanntes Feld mit einem vorhandenen Feld kollidieren könnte. Ohne ein Konfliktlösungssystem würde das Chaos herrschen!

From Zero to Merge: Building a JSON Renaming Field Component in Go instill-ai / Pipeline-Backend

⇋ Ein REST/gRPC-Server für den Instill VDP API-Dienst

Pipeline-Backend

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

pipeline-backend verwaltet alle Pipeline-Ressourcen innerhalb von Versatile Data Pipeline (VDP) zur Rationalisierung von Daten aus dem Von der Startkomponente über die KI-/Daten-/Anwendungskomponenten bis zum Ende Komponente.

Konzepte

Pipeline

In ? Instillieren Sie VDP, eine Pipeline besteht aus einem DAG (Directed Asymmetric Graph). aus mehreren Komponenten.

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Laden

Komponente

Eine Komponente dient als wesentlicher Baustein innerhalb einer Pipeline.

Weitere Informationen finden Sie in der Dokumentation zum Komponentenpaket Details.

Rezept

Ein Pipeline-Rezept gibt an, wie Komponenten konfiguriert sind und wie sie sind miteinander verbunden.

Rezepte werden in der YAML-Sprache definiert:

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Vollbildmodus aufrufen Vollbildmodus verlassen
Auf GitHub ansehen

Um ehrlich zu sein, begann ich zu zweifeln, ob ich dieses Problem lösen könnte, aber dann hinterließ Anni die perfekte Nachricht, die mich am Laufen hielt.

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

Als ich mich wohl fühlte, gab mir ChunHao, der ein JSON-Schema für diese Aufgabe erstellt hatte, grünes Licht? um mit dem Codieren zu beginnen. Und so begann die Reise!


Schritt 2️⃣: Entwerfen der Lösung

Die wichtigsten Anforderungen waren:

  1. Dynamisches Umbenennen: Felder sollten umbenannt werden, ohne die JSON-Struktur zu stören.
  2. Konflikterkennung: Wir mussten alle Konflikte zwischen den ursprünglichen und umbenannten Feldern erkennen.
  3. Konfliktlösung: Eine reibungslose Lösung, wie das Anhängen eines Suffixes, würde Namenskonflikte verhindern.

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


Schritt 3️⃣: Erstellen der Komponente

Ausgerüstet mit Kaffee☕ und Mut?, machte ich mich ans Programmieren. Hier ist ein kleiner Einblick in die Kernlogik:

Felder zuordnen

Zuerst habe ich ein Kartierungssystem erstellt, um alte und neue Feldnamen zu verfolgen. Dies war der Schlüssel zur Erkennung von Konflikten.

flowchart LR
s[Trigger] --> c1[OpenAI Component]
c1 --> c2[Stability AI Component]
c1 --> c3[MySQL Component]
c1 --> e[Response]
c2 --> e
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Jedes Mal, wenn ein Konflikt erkannt wurde, fügte die Funktion „_conflict“ zum neuen Namen hinzu. Es ist ein einfacher Trick, der dafür sorgt, dass unsere JSON-Felder einzigartig und vor allem freundlich zueinander bleiben! ✌️

Felder umbenennen

Sobald die Feldzuordnungen vorhanden waren, bestand der nächste Schritt darin, sie auf unsere JSON-Daten anzuwenden.

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>
Nach dem Login kopieren

Hier ist die Logik, die die zugeordneten Namen auf unsere JSON-Daten anwendet. Das Ergebnis? Unsere Daten sind sauber umbenannt, Konflikte gelöst und die Struktur intakt. ?

Nachdem die Komponente erstellt wurde, wurde der PR-Entwurf gelöscht und ein Kommentar erhalten:

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


Schritt 4️⃣: Testen und Verfeinern

Nachdem ich mich mit den Testmethoden von Instill vertraut gemacht und gelernt hatte, wie man effektive Testfälle erstellt, fuhr ich fort.

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

Testzeit! ? Ich habe Tests geschrieben, die alles von einfachen Umbenennungen bis hin zu komplexen Randfällen mit verschachtelten JSON-Feldern abdecken. Jede Testrunde führte zu weiteren Verfeinerungen.

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
}
Nach dem Login kopieren

Hier würde ich gerne eine persönliche Reflexion teilen: Das Testen war der schwierigste Teil dieses Projekts ?‍?. Es gab Zeiten, in denen ich dachte: „Tut dieser Test überhaupt das, was er soll?“

Gerade in diesem Moment stieß ich auf ein Fusselproblem

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

Er wies auf das Problem hin und lieferte sogar die Lösung. Ich musste es nur implementieren, aber es war eine Erinnerung daran, dass selbst die kleinsten Details wichtig sind, damit der Code reibungslos funktioniert.

Sobald ich diese anfänglichen Hürden überwunden hatte, wurde das Testen zu meinem Sicherheitsnetz. Es gab mir die Gewissheit, dass mein Code in verschiedenen Szenarien funktionieren würde ?️‍♂️. Es hat mir auch gezeigt, dass das Testen nicht nur ein Schritt zum Abhaken ist, sondern eine Möglichkeit, sicherzustellen, dass mein Code zuverlässig und belastbar ist.


Schritt 5️⃣: CI-Prüfung und letzte Anpassungen

Nach Abschluss meiner Tests habe ich meinen Code gepusht, bereit für den Überprüfungsprozess. Unsere CI-Prüfungen (Continuous Integration) bestanden jedoch nicht. Annis Kommentar erinnerte mich sanft daran, meine Testfälle noch einmal zu überprüfen:

„Hey @AkashJana18, könntest du deine Testfälle überprüfen? Unser CI-Check zeigt, dass es hier nicht bestanden wurde. Bitte testen Sie es zuerst lokal, bevor Sie es an die PR weiterleiten. Wann immer Sie Ihren Commit vorantreiben, lösen wir die Prüfungen aus, damit Sie etwaige Probleme erkennen können, bevor unsere Techniker Ihren Code prüfen. Danke!“

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

Da wurde mir klar, dass ich die Tests vor dem Absenden lokal ausführen musste. ChunHao fügte außerdem hinzu:

"Bitte führen Sie es aus und bestehen Sie es, bevor Sie die Überprüfung anfordern. Führen Sie $ go test ./pkg/component/operator/json/v0/... aus, um es lokal zu überprüfen."

Ich habe die Tests schnell vor Ort durchgeführt, die Probleme identifiziert und behoben.

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

From Zero to Merge: Building a JSON Renaming Field Component in Go
Ein kleiner Moment des Feierns?

Durch diesen Prozess habe ich die Bedeutung lokaler Tests noch mehr erkannt, da dadurch sichergestellt wurde, dass alles solide war, bevor ich es zur Überprüfung einreichte.

Vor der Zusammenführung führte ChunHao eine abschließende Überprüfung durch, nahm ein paar Optimierungen vor, überprüfte das Testrezept und aktualisierte die Dokumentation, um die neuen Änderungen widerzuspiegeln. Vielen Dank an Anni für ihre kontinuierliche Unterstützung während des gesamten Prozesses – es hat einen großen Unterschied gemacht. ?


? Reflexion über den kollaborativen Prozess ???

Eine der größten Lektionen, die ich gelernt habe, war, wie Zusammenarbeit und Mentoring ein Projekt über Erfolg oder Misserfolg entscheiden können. Die Moderatoren von Instill, Anni und ChunHao, gaben mir die Anleitung, die ich brauchte, wenn ich mich in der Go-Syntax verloren hatte oder mit dem richtigen Ansatz zu kämpfen hatte. Gemeinsam haben wir aus einem komplexen Problem eine saubere, funktionale Lösung gemacht.

Ich bin ehrlich, es gab Momente, in denen ich das Gefühl hatte, ich hätte mehr abgebissen, als ich ertragen konnte. Aber die ständige Ermutigung von Anni, gepaart mit der klaren Anweisung von ChunHao, hielten mich auf dem Laufenden.


⏭️ Nächste Schritte und zukünftige Verbesserungen

Ein weiterer Schritt könnte darin bestehen, diesen Ansatz auf andere Teile der Pipeline auszuweiten, die eine dynamische Verarbeitung von Feldnamen erfordern – denn wer liebt nicht ein bisschen Automatisierung⚙️?


?️ Tools & Ressourcen ?

  1. Go-Dokumentation: Zum Eintauchen in die Go-Syntax und zum Verständnis der Kernkonzepte.
  2. Instill-Dokumente: Eine Goldgrube gut organisierter Ressourcen zum Verständnis der Instill-Pipeline.
  3. Go Testing Framework: Das integrierte Testpaket in Go zum Schreiben von Unit-Tests, um sicherzustellen, dass alles wie erwartet funktioniert, und zur Integration mit CI-Tools.
  4. Golangci-lint: Ein Go-Linters-Aggregator zur Identifizierung von Problemen und zur Durchsetzung der Codequalität während der Entwicklung und CI-Prüfungen.

??‍???️ Mein Lernen

Mit Instills fundierter Dokumentation, der Anleitung von ChunHao und Annis moralischer Unterstützung wurde dieses Projekt zu einer fantastischen Lernerfahrung. Ich wusste nichts über Go, sondern implementierte eine voll funktionsfähige Funktion, die für die Produktion bereit ist (und ich habe die zusammengeführte PR, um das zu beweisen?).

Beweis:

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

Das obige ist der detaillierte Inhalt vonVon Null bis Zusammenführung: Erstellen einer JSON-Umbenennungsfeldkomponente in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage