Mein erstes CLI mit Go

Mary-Kate Olsen
Freigeben: 2024-09-25 22:08:22
Original
888 Leute haben es durchsucht

My first CLI with Go

Ich hatte immer ein bisschen Angst, über meine Erfahrungen zu schreiben. Nun, ich denke, ich kann jetzt damit klarkommen. Es war an einem frühen Morgen im August, als ich beschloss, ein CLI-Tool zu schreiben, nur um „zu üben“ zu gehen, da ich die Grundlagen ein paar Tage zuvor gelernt hatte. Heutzutage schaue ich mir nicht mehr viele Tutorials an, aber ich habe mir Nanas Video auf Golang angesehen und es war ziemlich großartig. Also, lasst uns gleich loslegen.

Der Grund

Ich wollte mit Go experimentieren, um das Betriebssystemmodul zu erlernen. Der erste Gedanke, der mir in den Sinn kam, war, ein Turborepo mit Golang als Server zu erstellen. Ja, ich weiß, dass wir es nicht in Vercel hosten können, aber die Idee war, mit Golang einen schnellen und sicheren Server zu erstellen. Wir können einen API-Proxy in Vercel verwenden, um die Anfragen von der Clientseite neu zu schreiben. Allerdings müssen Sie Ihren Go-Server an einigen Orten wie Railway oder Render separat hosten. Dies entspricht nicht der Regel einer Mono-Repo-Architektur, sondern besteht lediglich darin, den gesamten Code an einem einzigen Ort zu verwalten und einen starken Server aufzubauen. Es erhielt den Namen turbo-g (Turbo + Go).

Nun, nachdem ich ein Vorlagenprojekt erstellt hatte, wurde mir klar, dass Turbo einige Probleme mit Hot Reload und vielen anderen Dingen hat. Also ließ ich die Idee schließlich fallen und machte mich daran, etwas anderes zu schaffen.

Als ich dieses Vorlagenprojekt erstellt habe, habe ich gesehen, dass ich den Server manuell einrichten musste, und ich habe Gofiber verwendet, da es Express-ähnliche Funktionen hat, und als MERN-Stack-Entwickler fand ich es sehr einfach zu verwenden. Ich dachte einmal darüber nach, auch einen Serverprojektgenerator in Express zu erstellen, aber es gibt bereits einen, er heißt Express-Generator. Dann dachte ich, dass es das Gleiche vielleicht auch für Fiber gibt. Aber als ich in GitHub mit dem Thema:go-backend-template gesucht habe, habe ich nur vorgefertigte Vorlagen gefunden, die Sie klonen und für Ihre Projekte verwenden können. Da beschloss ich, es auszuprobieren.

Der Prozess

Das Erstellen einer CLI mit go ist ziemlich einfach, da Go-Codes in eine binäre ausführbare Datei kompiliert werden. Ich wusste jedoch nicht, wie man Dateien und Ordner mit dem OS-Modul erstellt. In JavaScript (NodeJs) können wir das fs-Modul zum Verwalten von Dateien verwenden. Vielen Dank an die Ärzte, die mir geholfen haben. Ich wusste bereits, wie ein einfaches Backend-Projekt in Express und Fiber aussieht. Mein Ansatz war sehr einfach. Ich werde ein CLI-Tool erstellen, das einige Flags wie --init und --name für den Projektnamen verwendet und ein Projekt und go.mod mit Fiber als Abhängigkeit generiert.

Dann blieb ich bei dem Ding namens Vorlagen hängen. Vorlagen sind das Grundgerüst einer Go-Datei. Eine Vorlage enthält den Inhalt der Datei. Es war interessant, etwas über Vorlagen zu lernen. Dann war es einfach, den Projektnamen aus der Flagge zu übernehmen und alle Dateiordner mit os.MkdirAll zu erstellen, die Vorlagen mit dem Text/Template-Modul zu analysieren und den Inhalt zum Erstellen der Dateien abzurufen. Alle Details zu diesen Modulen finden Sie in den Golang-Dokumenten, die ich oben erwähnt habe. Dann war es geschafft! ? Aber...

dirs := []string{"cmd", "internal/handlers", "internal/middleware", "internal/models", "internal/routes", "internal/services", "config"}
    for _, dir := range dirs {
        if err := os.MkdirAll(filepath.Join(projectPath, dir), os.ModePerm); err != nil {
            return fmt.Errorf("❗Failed to create directory %s: %w", dir, err)
        }
    }
Nach dem Login kopieren

Die Probleme

  • Ich habe schnell herausgefunden, dass ich github.com// nicht verwendet habe. als Modulname, was ein Problem war, auf das ich stieß, als ich zum ersten Mal etwas über die Go-Module lernte. Dann habe ich von hier aus etwas über den Modulpfad erfahren. Was ich also getan habe, um das Problem zu lösen, ist sehr einfach. Ich habe gerade ein -gh-Flag hinzugefügt, damit Benutzer ihren GitHub-Benutzernamen hinzufügen können, um das Modul zu erstellen, vorausgesetzt, der Projektname ist das GitHub-Repo.

  • Ein weiteres Problem besteht immer noch darin, dass ich in der Middleware-Vorlagendatei und der Konfigurationsvorlagendatei keinen Code bereitgestellt habe. Benutzer können MongoDB oder PostgreSQL als Datenbank verwenden, sodass es nicht erforderlich war, eine einzelne oder beide Konfigurationen in der Vorlage bereitzustellen. Nun, um das zu beheben, habe ich ein Problem erstellt und jeder, der diesen Blog liest, kann zur Lösung dieses Problems beitragen. Ich habe bereits einen Weg gefunden, aber hier kommt es auf das dritte Problem an.

  • Die CLI kann eine Benutzereingabe namens -db annehmen, um die vom Benutzer ausgewählte Datenbank wie MongoDB oder PostgreSQL abzurufen und eine Dummy-Verbindung in der Konfigurationsvorlage herzustellen. Wenn der Code jedoch zur Lösung dieser Art von Problemen wächst, wird die CLI unbrauchbar. Es verfügt bereits über zwei erforderliche Flags und ein optionales, nämlich --init, -gh und -name, und wenn wir ein Flag -db hinzufügen, wird es ein sehr langer Befehl. Um dieses Problem zu lösen, werde ich die CLI als interaktive CLI wie „create-next-app“ ändern. Nach dieser Änderung können wir viele Optionen zur Anpassung hinzufügen. Daran arbeite ich bereits. Wenn Sie also einen Beitrag leisten möchten, sind Sie herzlich willkommen. Das Problem finden Sie hier.

  • Das letzte Problem ist vorerst ein Hot-Reload-Modul. Wenn wir eine Glasfaser-App erstellen, haben wir standardmäßig keinen Änderungs-Listener. Wenn Fiber dies bereits hat und ich nichts davon weiß, dann verzeihen Sie mir, dass ich relativ neu in diesem Bereich bin. Wenn Sie etwas darüber wissen, lassen Sie es mich in den Kommentaren wissen. Um dieses Problem zu lösen, habe ich herausgefunden, Luft in das Projekt einzubeziehen.

Das Ende

Das ist die Geschichte von Optical. Der Blog soll euch jedoch über das kleine Projekt informieren und ist auch eine Einladung, an dem Projekt mitzuwirken, wenn ihr möchtet.

Die Reise hat gerade erst begonnen und war bisher sehr interessant. Ich habe viel gelernt und bin bereit, noch mehr zu lernen. Dies war mein erster Blog hier. Wenn ich also einen Fehler gemacht oder etwas übersehen habe, ignorieren Sie das bitte und verzeihen Sie mir. Beim nächsten Mal wird es besser.

Vielen Dank an alle, die den Blog gelesen haben. Geben Sie Optical ein ⭐, wenn Sie ihn interessant finden. Teilen Sie es auch mit, wenn Sie jemanden kennen, der bereit ist, einen Beitrag zu leisten. Wenn Sie außerdem Probleme finden oder Verbesserungsvorschläge haben, können Sie hier ein Problem erstellen

Nochmals vielen Dank.

Das obige ist der detaillierte Inhalt vonMein erstes CLI mit 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!