2013-03-14 1 views
5

Oto drzewo katalogów:Strange pakiet golang problem import

+/project 
    +---/bin 
    +---/pkg 
    +---/src 
    +---/client_test 
     +---client_test.go 
    +---main.go 

W main.go:

package main 
import ("client_test") 
func main() { 
    client_test.Send() 
} 

W client_test.go:

package client_test 
func Send() { 
} 

Błąd:

src/main.go|8| imported and not used: "client_test" 
src/main.go|32| undefined: client_test 

Przeczytałem How to use custom packages in golang? i myślę, że miałem takie samo rozwiązanie jak ten facet, ale po prostu nie wiem, jak rozwiązać ten problem. Proszę pomóż.

iść env:

GOARCH="amd64" 
GOBIN="/usr/local/go/bin" 
GOCHAR="6" 
GOEXE="" 
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common" 
GOHOSTARCH="amd64" 
GOHOSTOS="darwin" 
GOOS="darwin" 
GOPATH="/Users/staff/projects/Minigame_Server" (that's exactly my working directory) 
GOROOT="/usr/local/go" 
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64" 
CGO_ENABLED="1" 
+0

Jaki jest Twój wynik $ GOPATH, a jeszcze lepiej, wynik' go env'? – zzzz

+0

'import' próbuje znaleźć określoną ścieżkę zaczynając od każdego" obszaru roboczego ", który wyodrębnia z' $ GOPATH', po kolei. Sądząc z twojego drzewa, powiedziałbym, że twój '$ GOPATH' musi zawierać'/some/path/to/project', to znaczy musi zawierać ten katalog "projektu". Czy to dotyczy twojej sprawy? – kostix

+0

OARCH = "amd64" Gobin = "/ usr/local/bin/iść" GOCHAR = "6" GOEXE = "" GOGCCFLAGS = "- g -O2 -fPIC -m64 -pthread -fno-common" GOHOSTARCH = "amd64" GOHOSTOS = "Darwin" GOOS = "Darwin" GOPATH = "/ Users/praca/projekty/Minigame_Server" (to właśnie mój katalog roboczy) GOROOT = "/ usr/local/go" GOTOOLDIR = "/ usr/local/go/pkg/tool/darwin_amd64" CGO_ENABLED = "1" –

Odpowiedz

11

Command go, Test packages.

... files with names matching the file pattern "*_test.go" ... can contain test functions, benchmark functions, and example functions.

Nie używaj zastrzeżonych nazw. Na przykład zmień client_test na clienttest.

+1

Po niektórych testach jest to poprawne rozwiązanie, dzięki! PS: nazwa pakietu może zawierać "_test", ale nazwa pliku nie powinna. –

0

Jeśli $ GOPATH to "/ Users/praca/projekty/Minigame_Server" swoją "projekt" ścieżka bezwzględna powinna być „/ Users/praca/projekty/Minigame_Server/src/projekt".

Twój import powinien być następnie import "project/src/client_test".

Lub, co wydaje się, że chcesz zrobić, biorąc pod uwagę, że masz podkatalogów Go "/ pkg" i "/ bin" w "projekt", ustaw swój GOPATH na "/ Users/staff/projects/Minigame_Server/projekt "

, a następnie można import "client_test". Podstawową ideą jest to, że Go doda łańcuch importu do $ GOPATH/src /.

Dokument jest (nieco niejasny, zgadzam się) z: http://golang.org/doc/code.html#tmp_2. Domyślam się, że go przeczytałeś, dlatego stworzyłeś podkatalogi/pkg,/bin i/src, ale catch jest tam, gdzie powinien być GOPATH, a niejawny podpoziom jest automatycznie dodawany przez Go, gdy szuka importu (/ src jest automatycznie dodawany), a następnie ciąg importu bez zmian.

1

OK wreszcie znalazłem co jest nie tak z moim otoczeniu:

Ponieważ używam OS X więc użyłem .pkg plik, aby zainstalować iść, a GOROOT to "/ usr/local/Go"

Potem czytam kolejny fałszywy tutorial o instalacji GO i mówi, że muszę zdefiniować GOROOT w moim ~/.profile, więc dodałem "GOROOT ="/usr/local/go "wewnątrz ~/.profile, wtedy wszystko poszło nie tak.

Po uważnej lekturze oficjalnego dokumentu znalazłem:

The Go binary distributions assume they will be installed in /usr/local/go (or c:\Go under Windows), but it is possible to install them in a different location. If you do this, you will need to set the GOROOT environment variable to that directory when using the Go tools.

For example, if you installed Go to your home directory you should add the following commands to $HOME/.profile:

export GOROOT=$HOME/go export PATH=$PATH:$GOROOT/bin

Ale problem polega na tym, że nie wspomniał o tym, co się stanie, jeśli dodasz GOROOT w ~/.profile po instalacji .pkg, a także nie powiedziałeś, że nie możesz tego zrobić.

Oto moje ~ /.profil wygląda teraz (korygowane): projekty

eksport GOPATH = $ HOME// export PATH = $ PATH: $ GOPATH/bin

BTW: nie trzeba zrobić/folder projektu pod roboczym . Według http://golang.org/doc/code.html#tmp_2, ale również did't powiedzieć trzeba:

The workspace directory tree now looks like this:

bin/ 
    hello    # command executable 
pkg/ 
    linux_amd64/ 
     example/ 
      newmath.a # package object 
src/ 
    example/ 
     hello/ 
      hello.go # command source 
     newmath/ 
      sqrt.go # package source 
+2

Czy miksujesz GOROOT i GOPATH? – Alexander

-1

Można importować pakiet w głównym za pomocą następującego kodu będzie pracować importowej ( „FMT” ”./client_test ") w głównym pakiecie