2013-03-14 19 views
5

Ecco l'albero delle directory:Strano pacchetto golang problema di importazione

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

In main.go:

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

In client_test.go:

package client_test 
func Send() { 
} 

Errore:

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

Ho letto How to use custom packages in golang? e penso di aver avuto la stessa soluzione come questo ragazzo, ma non so come risolvere questo problema. Per favore aiuto.

andare 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

Qual è l'output $ GOPATH o, meglio ancora, di" go env "? – zzzz

+0

'import' prova a trovare il percorso specificato a partire da ogni" spazio di lavoro "estraendo dal tuo' $ GOPATH', a sua volta. A giudicare dal tuo albero, direi che il tuo '$ GOPATH' deve contenere'/some/path/to/project', cioè deve includere la directory "project". Questo vale per il tuo caso? – kostix

+0

OARCH = "amd64" GOBIN = "/ usr/local/go/bin" Gochar = "6" GOEXE = "" GOGCCFLAGS = "- g -O2 -fPIC -m64 -pthread -fno-comune" GOHOSTARCH = "amd64" GOHOSTOS = "Darwin" Goos = "Darwin" GOPATH = "/ Users/personale/progetti/Minigame_Server" (che è esattamente la mia directory di lavoro) GOROOT = "/ usr/local/go" GOTOOLDIR = "/ usr/local/go/pkg/tool/darwin_amd64" CGO_ENABLED = "1" –

risposta

11

Command go, Test packages.

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

Non utilizzare nomi riservati. Ad esempio, sostituire client_test con clienttest in tutto.

+1

Dopo alcuni test questa è la soluzione corretta, grazie! PS: il nome del pacchetto può contenere "_test" ma il nome del file non dovrebbe. –

0

Se il vostro $ GOPATH è "/ Users/personale/progetti/Minigame_Server", il vostro "progetto" percorso assoluto dovrebbe essere "/ Users/personale/progetti/Minigame_Server/src/progetto".

L'importazione deve essere import "project/src/client_test".

Oppure, quello che sembri vuoi fare, dato che hai sottodirectory relative a Go "/ pkg" e "/ bin" sotto "progetto", imposta il tuo GOPATH su "/ Users/staff/projects/Minigame_Server/progetto "

e quindi è possibile import "client_test". L'idea di base è che Go aggiungerà la stringa di importazione a $ GOPATH/src /.

Il documento (un po 'ambiguo, sono d'accordo) è qui: http://golang.org/doc/code.html#tmp_2. La mia ipotesi è che tu l'abbia letto ed è per questo che hai creato le sottodirectory/pkg,/bin e/src, ma il catch è dove dovrebbe essere GOPATH, quindi il sottolivello implicito aggiunto automaticamente da Go quando cerca un'importazione (/ src viene aggiunto automaticamente), quindi la stringa di importazione così com'è.

1

OK finalmente ho trovato quello che c'è di sbagliato con il mio ambiente:

Dal momento che sto usando OS X così ho usato file .pkg installare andare, e il GOROOT è "/ usr/local/go"

Poi ho letto un altro falso tutorial su GO installtion e dice che dovevo definire GOROOT nel mio ~/.profile, così ho aggiunto "GOROOT ="/usr/local/go "dentro ~/.profile, poi tutto è andato storto.

Dopo aver attentamente letto il documento ufficiale ho trovato questo:

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

Ma il problema è che non ha detto cosa succederà se aggiungete GOROOT in ~/.profile dopo l'installazione di .pkg, e inoltre non ha detto che non potete farlo.

Ecco il mio ~ /.cartella che non c'è bisogno di fare/progetto nell'ambito di lavoro: profilo simile ora (essendo corretto):

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

BTW . Secondo http://golang.org/doc/code.html#tmp_2, anche did't dire che devi:

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

Stai confondendo GOROOT e GOPATH? – Alexander

-1

è possibile importare il pacchetto per lo più utilizzando il seguente codice funzionerà importazione ( "fmt" "./client_test ") nel pacchetto principale

Problemi correlati