Was sind Konventionen für Dateinamen in Go?

114

Ich konnte die Konventionen für die Benennung von Paketen in Go finden: kein Unterstrich zwischen Wörtern, alles in Kleinbuchstaben.

Gilt diese Konvention auch für die Dateinamen?

Fügen Sie auch eine Struktur in eine Datei ein, wie Sie es für eine Java-Klasse getan haben, und benennen Sie die Datei dann nach der Struktur?

Wenn ich einen struct WebServer habe, lege ich ihn derzeit in eine Datei web_server.go.

David
quelle
3
AFAIK gibt es keine Konvention, aber _ Suffixe haben möglicherweise in Zukunft eine spezielle Semantik, daher empfehle ich, sie zu vermeiden.
Fuz

Antworten:

126

Es gibt ein paar Richtlinien zu befolgen.

  1. Dateinamen, die mit "." Beginnen. oder "_" werden vom go-Tool ignoriert
  2. Dateien mit dem Suffix _test.gowerden nur vom go testTool kompiliert und ausgeführt .
  3. Dateien mit Betriebssystem- und architekturspezifischen Suffixen folgen automatisch denselben Einschränkungen, z. B. name_linux.gowerden nur unter Linux und name_amd64.gonur unter amd64 erstellt. Dies entspricht einer //+build amd64Zeile am Anfang der Datei

go buildWeitere Informationen finden Sie in den Dokumenten zum Tool: https://golang.org/pkg/go/build/

JimB
quelle
3
Wo ist das dokumentiert? Vielen Dank!
Abhijeet Rastogi
2
@AbhijeetRastogi: golang.org/pkg/go/build und golang.org/cmd/go
JimB
3
Was soll ich tun , wenn ich für aufbauen will unixund others. ZB kann ich zwei Dateien machen file_windows.gound file_others.go. Es funktioniert gut. Aber für file_unix.gound file_others.goes funktioniert nicht. Ich möchte keine acht Dateien erstellen darwin freebsg linux openbsd netbsd dragonfly solaris android.
Ivan Black
3
@Fire: Dateinamen werden im Allgemeinen in Kleinbuchstaben geschrieben, sowohl aus Gründen der Konsistenz als auch für Systeme mit Dateisystemen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird.
JimB
1
Für alle, die dieselbe Frage wie @IvanBlack haben, kann dies mithilfe von Build-Tags erreicht werden. Sehen Sie hier für einen schönen Überblick, wie das geht: dave.cheney.net/2013/10/12/…
Ian Gustafson
30

Zusätzlich zu der Antwort von JimB sind reguläre Dateinamen in Kleinbuchstaben, kurz und ohne Unterstrich oder Leerzeichen. Im Allgemeinen folgen Dateinamen der gleichen Konvention wie Paketnamen. Siehe den Paketnamen Abschnitt Effective Go .

Ein gutes Beispiel finden Sie im strconv-Paket .

Zamicol
quelle
3
Was hast du langen Dateien einen Namen gegeben? mycommandsub1command.gooder my_command_sub1command.go, und was ist mitmycommandVO
user2727195
9
Ich würde Unterstriche für lange Namen vorschlagen. Habe das in einigen guten Projekten gesehen.
Avi
17

Go ist ziemlich liberal in Bezug auf die Organisation Ihres Codes innerhalb eines Pakets. In der Regel verbessert dies die Lesbarkeit und das Verständnis Ihres Codes. Der beste Weg, um zu lernen, wie dies gemacht wird, besteht darin, die Master zu studieren, dh die Standardbibliothek zu durchsuchen:

http://golang.org/src/pkg/

Es gibt jedoch zwei Regeln, an die ich denken kann. Wenn Sie Code angeben, der für verschiedene Plattformen kompiliert werden soll, verwenden Sie den Plattformnamen als Suffix:

mypkg_linux.go         // only builds on linux systems
mypkg_windows_amd64.go // only builds on windows 64bit platforms

Auch wenn Sie eine Datei mit dem Namen haben server.go, befinden sich die Tests für diese Datei in server_test.go.

Matt Harrison
quelle
1
Ich denke , sie werden nicht verwenden _front, _writeroder _bitsdann als signifikant Suffixe in der Zukunft!
Matt Harrison
Ich liebe Go, aber das goTool ist sehr restriktiv in Bezug auf die Paketstruktur (es ist eines meiner Lieblingssachen in Bezug auf die Sprache). Es werden einige sehr spezifische Konventionen bevorzugt (ein Paket pro Ordner [mit mindestens einer Ausnahme], das Paket des Ordners hat denselben Namen wie der Ordner [mit mindestens einer Ausnahme], der vollständige Paketimportpfad entspricht dem relativen Pfad von $GOPATH, einige Dateien sind je nach Namensformat usw. unterschiedlich behandelt
weberc2
1
@ weberc2 Die Einschränkungen sind analog zu Latex. Zuerst wollte ich mein Layout und andere irrelevante Details kontrollieren, bis mir klar wurde, dass alles, was geschrieben werden muss, guter Inhalt ist. In ähnlicher Weise können wir mit Go guten Code schreiben und andere Details für uns verarbeiten.
David
@ David Ich stimme zu. Rückblickend war mir unklar: Ich antwortete auf die Aussage des Antwortenden Go is quite liberal in terms of how you organise your code within a package. Go ist nicht liberal, es ist ziemlich restriktiv. Aber das ist gut so.
weberc2
8

Normalerweise werden Unterstriche in Dateinamen verwendet, um Plattform- / Arch-Only-Code zuzuweisen, zum Beispiel:

 cd $GOROOT/src/pkg/math/
 ls sqrt*s
sqrt_386.s  sqrt_amd64p32.s  sqrt_amd64.s  sqrt_arm.s

sqrt_386.swird vom Compiler nur auf 32-Bit-Prozessoren, sqrt_amd64.sauf amd64 usw. gelesen .

Es kann sich um einen der gültigen Werte von GOOSund / oder GOARCH( ref .

file_windows_amd64.go wird nur auf win64 kompiliert.

OneOfOne
quelle