2013-02-12 13 views
6

Ich wollte eine bestimmte Datei an der Spitze meiner Dateiliste in meinem Editor, so dass ich es mit _ vorangestellt. Dies ist, wie es aussieht:Go Dateinamen beginnend mit Unterstrich

mypkg 
    _func.go 
    a.go 
    b.go 

Ich weiß über Go Dateinamenskonventionen mit _test, _unix usw. Da jedoch _func keine spezifischen Architektur überein oder ist ein Testfall, warum es nicht als Quelle zählt Datei?

Wenn ich dieses Paket importiere, sind die in dieser Datei definierten Funktionen nicht verfügbar.

Antwort

8

Offenbar zu ermöglichen, die Unterstreichungs Gewicht das gleiche wie der Punkt Präfix am Anfang von Dateien und einfach ignoriert durch den go build Befehl. Dies ist jedoch keine Entscheidung des go-Tools, sondern des go/build-Pakets in der Standardbibliothek. Sie können die zuständige Zeile here sehen.

Meine Vermutung ist, dass temporäre Dateien mit Unterstrichen vorangestellt sind, so dass sie von der Build-Tool-Kette ignoriert werden.

Edit: This comment dokumentiert das Verhalten. Ich zitiere:

// Import returns details about the Go package named by the import path, 
// interpreting local import paths relative to the srcDir directory. 
// If the path is a local import path naming a package that can be imported 
// using a standard import path, the returned package will set p.ImportPath 
// to that path. 
// 
// In the directory containing the package, .go, .c, .h, and .s files are 
// considered part of the package except for: 
// 
//  - .go files in package documentation 
//  - files starting with _ or . (likely editor temporary files) 
//  - files with build constraints not satisfied by the context 
// 
// If an error occurs, Import returns a non-nil error and a non-nil 
// *Package containing partial information. 
// 

Und Sie können diese in benutzerfreundlicher Form im package docs of package go/build finden.

3

Ich denke, ich erinnere mich, dass _whatever durch das Go-Tool in ähnlicher Weise behandelt wird, wie dotfiles (.whatever) in der Shell versteckt sind. Leider kann ich keinen Hinweis darauf finden, wo es dokumentiert ist.

Also, wenn mein Speicher Server mich richtig, müssen Sie die Quelldatei umbenennen, da es nicht kompatibel mit dem Go-Build-System in dem Fall, dass Sie _file.go als Teil eines Pakets haben wollen.

Die Absicht für dieses Verhalten ist wahrscheinlich für die einfache Erstellung von temporären und widerspruchsfreie Dateien für Tools wie CGO usw.