2013-02-12 12 views
6

Chciałem, aby określony plik pojawił się na górze mojej listy plików w moim edytorze, dlatego przedrostek ten został poprzedzony _. Tak to wygląda:Nazwy plików Go zaczynające się od znaku podkreślenia

mypkg 
    _func.go 
    a.go 
    b.go 

wiem o konwencje nazewnictwa plików Go używając _test, _unix etc, jednakże, ponieważ _func nie pasuje do konkretnej architektury czy to przypadek testowy, dlaczego nie liczy się ona jako źródło plik?

Po zaimportowaniu tego pakietu funkcje zdefiniowane w tym pliku nie są dostępne.

Odpowiedz

8

Najwyraźniej ciężary podkreślają same jako przedrostek kropka na początku pliku i jest wyraźnie ignorowane przez polecenie go build. Nie jest to jednak decyzja narzędzia go, ale pakietu go/build w bibliotece standardowej. Możesz zobaczyć odpowiedzialną linię here.

Domyślam się, że pliki tymczasowe mają przedrostek z podkreśleniami, dzięki czemu są ignorowane przez łańcuch narzędzi budowania.

Edytuj: This comment dokumentuje zachowanie. Cytuję:

// 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. 
// 

I można znaleźć to w formę przyjazną użytkownikowi w package docs of package go/build.

3

Myślę, że pamiętam, że _whatever jest traktowane przez narzędzie go w podobny sposób, w jaki sposób pliki dotfiles (.whatever) są ukryte w powłoce. Niestety, nie mogę znaleźć żadnego odniesienia do tego, gdzie jest udokumentowane.

Tak więc, jeśli moja pamięć serwerów obsługuje mnie poprawnie, będziesz musiał zmienić nazwę pliku źródłowego, ponieważ nie jest on zgodny z systemem kompilacji Go w przypadku, gdy masz na myśli, że takie _file.go jest uważane za część jakiegoś pakietu.

Intencją tego zachowania jest prawdopodobnie, aby umożliwić łatwe tworzenie tymczasowych i bezkonfliktowe pliki do narzędzi takich jak CGO itp

Powiązane problemy