Go'da dosya adları için kurallar nelerdir?


114

Go'da paketleri adlandırmaya ilişkin kuralları bulabilirim: kelimeler arasında alt çizgi yok, her şey küçük harf.

Bu kural dosya adları için de geçerli mi?

Bir java sınıfı için yaptığınız gibi tek bir dosyaya bir struct koyar ve sonra dosyayı struct'tan sonra adlandırır mısınız?

Şu anda, bir struct WebServer yapısına sahipsem, onu web_server.go dosyasına koyuyorum.


3
AFAIK bir kural yoktur ama _ sonekleri gelecekte özel anlamlara sahip olabilir, bu yüzden bunlardan kaçınmanızı öneririm.
fuz

Yanıtlar:


127

Uyulması gereken birkaç kural var.

  1. "." İle başlayan dosya adları. veya "_" git aracı tarafından yok sayılır
  2. Soneki _test.goolan dosyalar yalnızca go testaraç tarafından derlenir ve çalıştırılır .
  3. OS ve mimariye özgü son eklere sahip dosyalar aynı kısıtlamaları otomatik olarak takip eder, örneğin name_linux.gosadece linux üzerine kurulur, name_amd64.gosadece amd64 üzerine kurulur. Bu, //+build amd64dosyanın en üstünde bir satır olmasıyla aynıdır

Daha go buildfazla ayrıntı için aracın belgelerine bakın : https://golang.org/pkg/go/build/


3
Bu nerede belgelendi? Teşekkürler!
Abhijeet Rastogi


3
Ben oluşturmak istiyorsanız ne yapayım yapmak unixve others. Örneğin iki dosya yapabilirim file_windows.gove file_others.go. İyi çalışıyor. Ama için file_unix.gove file_others.gobunun çalışmalarını does'n. Sekiz dosya oluşturmak istemiyorum darwin freebsg linux openbsd netbsd dragonfly solaris android.
Ivan Black

3
@Fire: dosya adları hem tutarlılık hem de büyük / küçük harfe duyarlı dosya sistemlerine sahip sistemler için genellikle büyük / küçük harf olarak kullanılır.
JimB

1
@IvanBlack ile aynı soruyu soran herkes için bu, yapı etiketleri kullanılarak gerçekleştirilebilir. Bunun nasıl yapılacağına dair güzel bir genel bakış için buraya bakın: dave.cheney.net/2013/10/12/…
Ian Gustafson

30

JimB tarafından sağlanan cevaba ek olarak , normal dosya adları küçük harfli, kısadır ve herhangi bir alt çizgi veya boşluk içermez . Genellikle, dosya adları, paket adlarıyla aynı kuralı izler. Bkz Paket İsimler bölümüne Etkili Go .

İyi bir örnek için strconv paketine bakın .


3
uzun dosyalara ne isim verdin? mycommandsub1command.goya da my_command_sub1command.gopeki yamycommandVO
user2727195

9
Uzun isimler için alt çizgi öneririm. Bunu bazı iyi projelerde görmüştüm.
Avi

17

Go, bir paket içinde kodunuzu nasıl düzenlediğiniz açısından oldukça liberaldir, genellikle kodunuzun okunabilirliğini ve anlaşılmasını geliştiren şeydir. Bunun nasıl yapıldığını öğrenmenin en iyi yolu, ustaları incelemek, yani standart kitaplığa göz atmaktır:

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

Ancak düşünebileceğim 2 kural var. Farklı platformlar için derlenecek kodu belirtirken, platform adını bir sonek olarak kullanırsınız:

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

Ayrıca adlı bir dosyanız varsa server.go, o dosya için testler olacaktır server_test.go.



1
Onların kullanmaz sanırım _front, _writerya da _bitsdaha sonra gelecekte önemli soneklerinin olarak!
Matt Harrison

Go'yu seviyorum, ancak goaraç paket yapısı konusunda oldukça kısıtlayıcı (bu, dille ilgili en sevdiğim şeylerden biri). Bazı çok özel kuralları tercih eder (klasör başına bir paket [en az bir istisna dışında], klasörün paketi klasörle aynı adı paylaşır [en az bir istisna ile], tam paket içe aktarma yolu, içindeki göreceli yolla eşleşir $GOPATH, bazı dosyalar ad formatına vb. bağlı olarak farklı şekilde işlenir)
weberc2

1
@ weberc2 Kısıtlamalar Lateks'e benzer. Öncelikle, yazılması gereken her şeyin iyi içerik olduğunu anlayana kadar düzenimi ve diğer alakasız detayları kontrol etmek istedim. Benzer şekilde Go, iyi kod yazmamızı sağlar ve bizim için diğer ayrıntıları ele alır.
david

@david Kabul ediyorum. Geçmişe baktığımda net değildim: Cevaplayanın ifadesine cevap veriyordum Go is quite liberal in terms of how you organise your code within a package. Go liberal değil, oldukça kısıtlayıcı. Ama bu iyi bir şey.
weberc2

8

Dosya adlarında genellikle alt çizgi, platform / yalnızca arşiv kodunu atamak için kullanılır, örneğin:

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

sqrt_386.sderleyici tarafından yalnızca 32bit işlemcilerde, sqrt_amd64.samd64 üzerinde vb. okunacaktır .

Geçerli değerlerden herhangi biri GOOSve / veya GOARCH( ref .

file_windows_amd64.go yalnızca win64'te derlenecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.