Go (Golang): Endlich Struktur im Code // deutsch

preview_player
Показать описание

Eine Frage, die zu Go (Golang) regelmäßig gestellt wird, lautet: Wie sollte man seinen Code strukturieren? Gibt es Richtlinien, an denen man sich orientieren und Leitplanken, an denen man sich entlanghangeln kann? Tatsächlich gibt es inzwischen eine offizielle Empfehlung, wie Module und Packages in Go strukturiert werden sollten. In diesem Video stellt Dir Golo Roden, Gründer und CTO der the native web GmbH, diese Richtlinien vor.

00:00 – Einleitung
01:30 – Warum Codestruktur wichtig ist
03:04 – Veraltete Informationen
04:18 – Module und Packages
05:48 – Ein Modul, ein Package
06:37 – Ein Modul, mehrere Packages
07:23 – Das internal-Package
08:42 – Eine Anwendung, ein Package
09:26 – Eine Anwendung, mehrere Packages
10:24 – Mehr als ein Einstiegspunkt
11:17 – Das pkg-Verzeichnis
11:50 – Sonstige Überlegungen

────────────────────

Über the native web 🦄

Wir sind ein Beratungs-, Schulungs- und Entwicklungsunternehmen, das sich auf Web- und Cloud-Technologien spezialisiert hat. Wir streben nach intelligenten und eleganten Lösungen für komplexe Probleme, und wir glauben, dass Softwareentwicklung kein Selbstzweck ist. Stattdessen sollte Software tatsächliche Probleme der realen Welt lösen.

Wir glauben, dass native Web- und Cloud-Technologien das Fundament sind, auf dem die Zukunft aufbaut. Unsere Kernkompetenz ist der Entwurf und die Entwicklung verteilter Web- und Cloud-Anwendungen unter Verwendung dieser Technologien in interdisziplinären Teams. Wir entwickeln auch unser eigenes Open-Source-Framework namens wolkenkit. Und wir lieben es, unser Wissen in Schulungen und Workshops, auf Konferenzen und bei Usergroups zu teilen.

────────────────────

Weiterführende Links 🌍

Рекомендации по теме
Комментарии
Автор

Hallo Golo, vielen Dank für die tolle Erklärung. Was mir bisher völlig unbekannt war, wie ich mehr als eine main Funktion in meinem Modul unterbringe. Danke!

brubbeldi
Автор

Danke für das Video!
Den Aufbau von Modulen und Paketen finde ich aus technischer Sicht noch relativ einfach. Die Kunst ist hier eher die richtige Ordnung innerhalb des Moduls zu finden. Dazu hast du ja auch schon öfter etwas in deinen Videos gesagt. Etwas länger habe ich gebraucht, um das Konzept der Workspaces zu verstehen und zu nutzen.

wolfhh
Автор

Danke für die Zusammenfassung. Mich hätte noch eure Empfehlung für das Modul-Setup in einem Monorepo mit Shared Code für die Go basierten Microservices interessiert.

vikingair
Автор

Moin Golo, und danke für den tollen Beitrag.
Ich bin seit deinem "Warum GO?" Video an der Sprache interessiert (ok, fasziniert wohl eher) und habe auch schon ein etwas größeres und einige kleinere Projekte (im privaten Umfeld) umgesetzt.
Ich bin ein großer Freund des Konzepts der hexagonalen Architektur und habe mich bei dem größeren Projekt auch daran orientiert -- mit Erfolg wie ich finde. Nun legt diese Idee natürlich erstmal eine etwas "verzweigtere" Strukturierung der Packages nahe, was für mich zwar irgendwie umsetzbar war, sich dabei aber nicht richtig anfühlte -- eher wie ein Missbrauch.
Die Ankündigung deines Videos hat mich daher direkt angefixt und ich hatte recht fest erwartet, hier eine Verbesserung der Unterstützung solcher eher baumartigen Strukturierung von Packages präsentiert zu bekommen. Weit gefehlt, im Gegenteil: Meine bisherige Vorgehensweise wird in dem Misuse-Gefühl bestätigt.
Ich finde: Gut so. Warum? Ich denke ich habe die Skalierungsmöglichkeit über Module völlig ignoriert. Und die Empfehlung, die Packagestruktur flach zu halten ist hier ein willkommener Augenöffner, die einzelnen Module nicht zu wild wachsen zu lassen.
Ich werde beizeiten (im Job hab ich's leider nur mit Java/ Spring zu tun) mal versuchen, die Adapter im (Kontext der Hexagonalen Architektur) nicht mehr als Packages, sondern als Module innerhalb des Workspaces zu designen. Vielleicht (und wenn gewünscht) berichte ich mal 😉
Vielen Dank, mach so weiter und beste Grüße

pianoonetimer
Автор

Ciao Golo, deine Videos sind wirklich sehr verständlich und sachlich. Was für eine UI empfiehlst du mit Go?

EdwinVoser
Автор

Im Grund handhabe ich meine Module genau wie im Video beschrieben. Wir haben allerdings von einem anderen Dienstleister Module im Kundenprojekt übernommen und dort gibt es `pkg`-Verzeichnisse, einmal im Root-Verzeichnis und dann nochmals als `internal/pkg` dort waren/sind über OpenAPI automatisch generierte Clients enthalten. Beide Verzeichnisse werden nach und nach aufgelöst... und automatisch generierte Clients werden in ein separates Modul verschoben, wenn diese keine internen Clients sind. Ein `pkg`-Verzeichnis wird man bei mir also in Greenfield-Projekten nirgendwo mehr entdecken können. Eine Anmerkung habe ich noch: Auch wenn man in Go seine Module im Dateisystem hierarchisch ablegen kann, so sind die Paketnamen nicht hierarchisch, deshalb sind auch Paketnamen wie `model`, `util`, `common`, etc. keine gute Idee. Gerade Java-Entwickler, die noch nicht so viel in Go entwickelt haben, haben damit ein Problem...

matthiasendler
Автор

Danke für die Zusammenfassung. Was mir immer noch nicht klar ist: gibt es sinnvolle Gründe mehr als eine go Datei ( den jeweiligen Test Mal nicht betrachtet) mit in ein Modul zu packen?

Würde man in einem Modul und Verzeichnis namens "user"
neben user.go vielleicht noch Login. Gob finden ? Oder vielleicht eher ein anderes Beispiel, würde man in user neben user.go auch user_verigikeyion finden? Oder wäre das eher in einem separaten Modul namens user_verifikation zu finden?

christianhorauf
Автор

Super video jedes mal.

Gibt es eigentlich eine Lösung in go wenn ich meinen modul nur als binary biblliothek rausgeben will?

suikast
Автор

Da fällt mir Adminer ein, alles in einer Datei ;-D

badmax
Автор

Hi Golo, sprichst Du Deine Videos frei ein oder liest Du Wort für Wort von einem Skript ab?

Ich würde gern einen Youtube-Kanal zu einem anderen Thema starten, bin mir aber bezüglich der Narration noch unsicher.

Danke!

rene
Автор

Ich würde eine Krise bekommen wenn alle Packages im root Verzeichnis liegen. Beispiele für solche Repos wie Gitea oder HUGO - da findet man garnichts wieder.

Paenklr
Автор

OK! Unübersichtlichen Code schreiben, damit ich nie entlassen werden kann :D

IlseKeznach
Автор

Solchen PHP Code bin ich leider mehrfach im Leben begegnet. HTML, CSS, JS, PHP und SQL alles Inline und zusammen gemischt. Man kann 3 24 zoll Monitore haben und trotzdem noch zur Seite scrollen. Und die Verzweiflung ist tatsächlich sehr groß. Nur die Leitung sieht es nicht ein. So ist halt der Industriecode ...

heinrichschiller