2014-11-15 18 views
27

Mam trudności z zaimportowaniem lokalnego pliku GO do innego pliku GO.importowanie plików GO w tym samym folderze

Moje struktury projektu jest jak coś poniżej

-samplego 
--pkg 
--src 
---github.com 
----xxxx 
-----a.go 
-----b.go 
--bin 

próbuję zaimportować a.go wewnątrz b.go. Próbowałem następujących,

import "a" 
import "github.com/xxxx/a" 

Żaden z tych worked..I zrozumieć muszę mieszać się z GOPATH ale nie mogłem zrobić to dobrze. Obecnie moja GOPATH wskazuje samplego (/ Przestrzeń robocza/samplego) .I uzyskać poniżej błąd

cannot find package "a" in any of: 
/usr/local/go/src/pkg/a (from $GOROOT) 
/workspace/samplego/src/a (from $GOPATH) 

także, w jaki sposób praca GOPATH gdy te pliki źródłowe są importowane do innego projektu/modułu? Czy wtedy lokalny import byłby problemem? Jaka jest najlepsza praktyka w tym przypadku - czy ma tylko jeden plik danych w module (z powiązanymi testami)?

+0

dowolną liczbę plików w katalogu są częścią tego samego pakietu od samego początku. (I muszą mieć tę samą deklarację "pakiet a" na górze). – twotwotwo

+0

Dzięki @twotwotwo ... Czy możesz dać mi znać, jak rozwiązać powyższy problem? Ponadto, gdy mamy pliki multipe w pakiecie, import powinien odbywać się pełną ścieżką, np. github.com/xxxx/a lub po prostu zrobiłby –

Odpowiedz

28

Dowolna liczba plików w katalogu to pojedynczy pakiet; symbole zadeklarowane w jednym pliku są dostępne dla innych bez żadnych atrybutów lub import. Wszystkie pliki wymagają tej samej deklaracji package foo u góry (lub pojawi się błąd z go build).

Potrzebny jest zestaw GOPATH do katalogu, w którym znajdują się katalogi pkg, src i bin. Jest to tylko kwestia preferencji, ale często ma miejsce na pojedynczy obszar roboczy dla wszystkich aplikacji (czasami $HOME), a nie na aplikację.

Zwykle ścieżka Github byłaby github.com/username/reponame (nie tylko github.com/xxxx). Więc jeśli chcesz mieć main i inny pakiet, może skończyć się robi coś pod workspace/src jak

github.com/ 
    username/ 
    reponame/ 
     main.go // package main, importing "github.com/username/reponame/b" 
     b/ 
     b.go // package b 

nocie zawsze importować z pełną ścieżką: github.com/... import względne nie są dozwolone w obszarze roboczym. Jeśli masz już dość pisania ścieżek, użyj goimports. Jeśli były coraz przez z go run, nadszedł czas, aby przełączyć się go build: run oferty słabo ze stwardnieniem akt main s i nie przeszkadza, aby przetestować, ale słyszałem (od Dave Cheney here) go run nie odbudować brudne zależności.

Wygląda na to, że przynajmniej próbowałeś ustawić GOPATH w odpowiedni sposób, więc jeśli nadal tkwisz w martwym punkcie, możesz podać dokładnie, w jaki sposób ustawiłeś zmienną środowiskową (polecenie itp.) Oraz jakie polecenie wykonałeś i jaki błąd się wydarzył. Here are instructions on how to set it (and make the setting persistent) under Linux/UNIX i here is the Go team's advice on workspace setup. Może ani nie pomaga, ale spójrz i przynajmniej wskaż, która część myli cię, jeśli jesteś zdezorientowany.

+1

goimports był bardzo pomocny :) –

+0

Jeśli masz problemy z uruchomieniem wielu plików w pakiecie głównym, zobacz [tę odpowiedź] (http://stackoverflow.com/a/28081554/616644). –

8

./main.go (w obudowie głównej)
./a/a.go (w opakowaniu a)
./a/b.go (w opakowaniu a)

w tym przypadku:
main.go import "./a"

Może wywoływać funkcję w a.go i b.go, z których pierwsze litery są włączone.

0

Import nie jest potrzebny, o ile zadeklarujesz, że a.go i b.go będą w tym samym pakiecie. Następnie można użyć go run rozpoznać wiele plików z:

$ go run a.go b.go 
+0

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/19039597) –

Powiązane problemy