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