Quali sono le convenzioni per i nomi di file in Go?


114

Ho trovato le convenzioni per denominare i pacchetti in Go: nessun carattere di sottolineatura tra le parole, tutto in minuscolo.

Questa convenzione si applica anche ai nomi dei file?

Metti anche una struttura in un file come se avessi fatto per una classe java e quindi dai un nome al file dopo la struttura?

Attualmente, se ho una struttura WebServer, la metto in un file web_server.go.


3
Per quanto ne so non ci sono convenzioni ma i suffissi _ potrebbero avere una semantica speciale in futuro, quindi consiglio di evitarli.
fuz

Risposte:


126

Ci sono alcune linee guida da seguire.

  1. Nomi di file che iniziano con "." o "_" vengono ignorati dallo strumento go
  2. I file con il suffisso _test.govengono compilati ed eseguiti solo dallo go teststrumento.
  3. I file con suffissi specifici del sistema operativo e dell'architettura seguono automaticamente gli stessi vincoli, ad esempio name_linux.goverranno compilati solo su Linux, name_amd64.goverranno compilati solo su amd64. È lo stesso che avere una //+build amd64riga all'inizio del file

Consulta la documentazione dello go buildstrumento per maggiori dettagli: https://golang.org/pkg/go/build/


3
Dov'è documentato? Grazie!
Abhijeet Rastogi


3
Cosa dovrei fare se voglio costruire per unixe others. Ad esempio, posso creare due file file_windows.goe file_others.go. Funziona bene. Ma per file_unix.goe file_others.gonon funziona. Non voglio creare otto file darwin freebsg linux openbsd netbsd dragonfly solaris android.
Ivan Black

3
@Fire: i nomi dei file sono generalmente tutti minuscoli in maiuscolo, sia per coerenza che per sistemi con filesystem case-insensitive.
JimB

1
Per chiunque abbia la stessa domanda di @IvanBlack, questo può essere ottenuto utilizzando i tag di build. Vedi qui per una bella panoramica di come farlo: dave.cheney.net/2013/10/12/…
Ian Gustafson

30

Oltre alla risposta fornita da JimB , i nomi dei file regolari sono minuscoli, brevi e senza alcun tipo di trattino basso o spazio. In genere, i nomi dei file seguono la stessa convenzione dei nomi dei pacchetti. Vedere la sezione Nomi dei pacchetti di Effective Go .

Vedere il pacchetto strconv per un buon esempio.


3
cosa dai un nome ai file lunghi? mycommandsub1command.gooppure my_command_sub1command.go, e che diremycommandVO
user2727195

9
Suggerirei di sottolineatura per i nomi lunghi. L'ho visto in alcuni buoni progetti.
Avi

17

Go è abbastanza liberale in termini di come organizzare il codice all'interno di un pacchetto, di solito è ciò che migliora la leggibilità e la comprensione del codice. Il modo migliore per imparare come si fa è studiare i master, cioè sfogliare la libreria standard:

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

Tuttavia, ci sono 2 regole a cui posso pensare. Quando si specifica il codice da compilare per piattaforme diverse, si utilizza il nome della piattaforma come suffisso:

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

Inoltre, se hai un file chiamato server.go, i test per quel file sarebbero in formato server_test.go.



1
Immagino che non useranno _front, _writero _bitscome suffissi significativi in ​​futuro, allora!
Matt Harrison

Adoro Go, ma lo gostrumento è molto restrittivo sulla struttura dei pacchetti (è una delle cose che preferisco della lingua). Favorisce alcune convenzioni molto specifiche (un pacchetto per cartella [con almeno un'eccezione], il pacchetto della cartella condivide lo stesso nome della cartella [con almeno un'eccezione], il percorso di importazione completo del pacchetto corrisponde al percorso relativo da $GOPATH, alcuni file sono trattati in modo diverso a seconda del formato del nome, ecc.)
weberc2

1
@ weberc2 Le limitazioni sono analoghe a Latex. Innanzitutto, volevo controllare il mio layout e altri dettagli irrilevanti, finché non ho capito che tutto ciò che deve essere scritto è un buon contenuto. Allo stesso modo, Go ci consente di scrivere un buon codice e gestisce altri dettagli per noi.
David

@david sono d'accordo. In retrospettiva non ero chiaro: stavo rispondendo alla dichiarazione di chi ha risposto Go is quite liberal in terms of how you organise your code within a package. Go non è liberale, è piuttosto restrittivo. Ma è una buona cosa.
weberc2

8

Di solito il carattere di sottolineatura nei nomi dei file viene utilizzato per assegnare il codice solo piattaforma / arch, ad esempio:

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

sqrt_386.sverrà letto solo dal compilatore su processori a 32 bit, sqrt_amd64.ssu amd64, ecc.

Può essere uno qualsiasi dei valori validi di GOOSe / o GOARCH( rif .

file_windows_amd64.go verrà compilato solo su win64.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.