Go Projekt Layout

Der pkg-Ordner ist ein Antipattern

An gut findbarer Stelle im Internet (ich werde sie nicht verlinken, weil sie dann nur noch mehr Relevanz bekommt), findet sich eine Go Modul Struktur, in der angeregt wird, einen pkg Ordner anzulegen für Pakete, die das Programm in dem Modul betreffen.

Wenn die Pakete jedoch tatsächlich nur das Programm betreffen, sollten sie in einem Ordner internal befinden. Das ist tatsächlich Dokumentiert und sorgt dafür, dass diese Pakte nicht Teil derÖffentlichen API sind.

Der pkg Ordner keinerlei semantischen oder informellen Wert und sollte deshalb ganz verschwinden. Hatte ich also ein total tolles neues Kompressionsverfahren - nennen wir es MyZap - entwickelt und möchte es als Bibliothek sowie als CLI-Tool veröffentlichen, hätte ich etwa folgende Projektstruktur:

cmd/
 +- myzipper/
        main.go
internal/
 +- ui/
    ...
 +- cfg/
compress/
    lib.go
    ...
go.mod
go.sum
license
readme.md
Makefile

Damit ließe sich das Programm einfach mit go get installieren und über import die Bibliothek benutzen. Irgendwelche statischen Webseiten, Konfigurationen etc., gehören damit dann auch in den internal Ordner, da die definitiv nicht Teil der öffentlichen API sind.

Viel schöner und genauer lässt sich das hier nachlesen: Simple Project Layout with Modules