Importowanie plików go w tym samym folderze

Mam problemy z importowaniem lokalnego pliku go do innego pliku go.

Moja struktura projektu jest jak coś poniżej

-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
Próbuję zaimportować A. wejdź do B. idź. Próbowałem następujące,
import "a"
import "github.com/xxxx/a"
Żadne z nich nie zadziałało..Rozumiem, że muszę się mieszać z GOPATHEM, ale nie mogłem tego zrobić dobrze. Obecnie mój GOPATH wskazuje na samplego (/workspace / samplego).Otrzymuję poniższy błąd
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)

Również, jak działa GOPATH gdy te pliki źródłowe są zaimportowany do innego projektu / modułu? Czy lokalny import byłby zatem problemem? Jaka jest najlepsza praktyka w tym przypadku - czy posiadanie tylko jednego pliku go w module (wraz z powiązanymi testami)?

Author: g0c00l.g33k, 2014-11-15

3 answers

Dowolna liczba plików w katalogu jest pojedynczym pakietem; symbole zadeklarowane w jednym pliku są dostępne dla innych Bez imports lub kwalifikatorów. Wszystkie pliki wymagają tej samej deklaracji package foo u góry(w przeciwnym razie pojawi się błąd z go build).

Musisz GOPATH ustawić do katalogu, w którym twój pkg, src, oraz bin katalogów. Jest to tylko kwestia preferencji, ale powszechne jest posiadanie jednego obszaru roboczego dla wszystkich aplikacji( czasami $HOME), a nie jednego na app.

Normalnie ś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żesz skończyć robiąc coś pod workspace/src jak

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

Uwaga zawsze importujesz z pełną ścieżką github.com/...: import względny nie jest dozwolony w obszarze roboczym. Jeśli znudzi ci się pisanie ścieżek, użyj goimports. Jeśli radzisz sobie z go run, nadszedł czas, aby przełączyć się na go build: run słabo radzi sobie z wieloma plikami main s i nie zadałem sobie trudu testowania, ale słyszałem (z Dave Cheney tutaj) go run nie odbudowuje brudnych zależności.

Wygląda na to, że przynajmniej próbowałeś ustawić GOPATH na właściwą rzecz, więc jeśli nadal utknąłeś, może załącz dokładnie jak Ustawiłeś zmienną środowiskową (polecenie itp.) i jakie polecenie uruchomiłeś i co się stało błąd. tutaj znajdują się instrukcje, jak to ustawić (i ustawić trwałe) pod Linuksem / UNIXEM i oto porady zespołu Go dotyczące konfiguracji przestrzeni roboczej . Może żadne nie pomaga, ale spójrz i przynajmniej wskaż, która część Cię myli, jeśli jesteś zdezorientowany.

 38
Author: twotwotwo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:02

Import nie jest konieczny, o ile zadeklarujesz, że zarówno a.go, jak i b.go znajdują się w tym samym opakowaniu. Następnie możesz użyć go run, aby rozpoznać wiele plików za pomocą:

$ go run a.go b.go
 12
Author: Jason Kao,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 12:11:17

./ maingo (in package main)
./a / a.go (w pakiecie a)
./a / b.go (w pakiecie a)

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

Może wywołać funkcję w a. go i b. go, że z pierwszych liter czapki na.

 8
Author: user2889485,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-15 13:44:22