2013-03-14 11 views
5

Hier ist der Verzeichnisbaum:Seltsam golang Paket importieren Ausgabe

+/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() { 
} 

Fehler:

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

Ich habe gelesen How to use custom packages in golang? und ich denke, ich hatte die gleiche Lösung wie dieser Typ, aber ich weiß nur nicht, wie dieses Problem zu lösen. Bitte helfen Sie.

gehen 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

Was ist Ihr $ GOPATH, oder noch besser, Ausgabe von' go env'? – zzzz

+0

'import' versucht, den angegebenen Pfad zu finden, der von jedem" workspace "ausgeht, den er wiederum aus Ihrem' $ GOPATH' extrahiert. Ausgehend von Ihrem Baum würde ich sagen, dass Ihr '$ GOPATH''/einige/Pfad/zu/Projekt' enthalten muss, das heißt, es muss dieses "Projekt" Verzeichnis enthalten. Gilt das für Ihren Fall? – kostix

+0

OARCH = "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/Personal/projects/Minigame_Server" (das ist genau mein Arbeitsverzeichnis) GOROOT = "/ usr/local/go" GOTOOLDIR = "/ usr/local/gehen/pkg/tool/darwin_amd64" CGO_ENABLED = "1" –

Antwort

11

Command go, Test packages.

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

Verwenden Sie keine reservierten Namen. Ersetzen Sie zum Beispiel client_test durchgehend durch clienttest.

+1

Nach einigen Tests ist dies die richtige Lösung, danke! PS: Der Paketname kann "_test" enthalten, der Dateiname sollte jedoch nicht. –

0

Wenn Ihr $ GOPATH ist "/ Users/Personal/projects/Minigame_Server", Ihr "Projekt" absolute Pfad sollte „/ Users/Personal/projects/Minigame_Server/src sein/Projekt".

Ihr Import sollte dann import "project/src/client_test" sein.

Oder, was Sie scheinen zu tun, da Sie die Go-verwandten Unterverzeichnisse "/ pkg" und "/ bin" unter "Projekt" haben, setzen Sie Ihren GOPATH auf "/ Users/staff/projects/Minigame_Server/project "

und dann können Sie import "client_test". Die Grundidee ist, dass Go die Import-Zeichenkette an $ GOPATH/src/anhängen wird.

Die (etwas mehrdeutig, stimme ich zu) doc ist hier: http://golang.org/doc/code.html#tmp_2. Ich nehme an, dass Sie es gelesen haben, weshalb Sie die Unterverzeichnisse/pkg,/bin und/src erstellt haben, aber der Catch ist, wo GOPATH sein sollte, dann der implizite Sublevel, der automatisch von Go hinzugefügt wird, wenn er nach einem Import sucht (/ src wird automatisch hinzugefügt), dann wird die Importzeichenfolge unverändert beibehalten.

1

OK schließlich fand ich, was mit meiner Umgebung nicht stimmt:

Da ich verwende OS X so habe ich .pkg-Datei gehen zu installieren, und die GOROOT ist "/ usr/local/go"

Dann lese ich ein weiteres gefälschtes Tutorial über GO installtion und es heißt, ich müsste GOROOT in meiner ~/.profile definieren, also habe ich "GOROOT ="/usr/local/go "in ~/.profile hinzugefügt, dann ist alles schief gelaufen.

Nach sorgfältiger Prüfung der offiziellen Dokument zu lesen fand ich diese:

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

Aber das Problem ist, es hat nicht erwähnt, was passieren wird, wenn Sie GOROOT in ~/.profile nach .pkg Installation hinzufügen, und es hat auch nicht gesagt, dass Sie dies nicht tun können.

Hier ist mein ~ /.aussehen wie jetzt Profil (wird korrigiert):

Export GOPATH = $ HOME/projects/ export PATH = $ PATH: $ GOPATH/bin

BTW: Sie brauchen nicht zu machen/Projektordner unter Arbeitsplatz . Nach http://golang.org/doc/code.html#tmp_2 es auch sagen did't müssen Sie:

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

Vermischen Sie GOROOT und GOPATH? – Alexander

-1

Sie das Paket in der Haupt importieren können, indem Sie den folgenden Code verwendet wird Import ( "fmt" “arbeiten./client_test ") im Hauptpaket

Verwandte Themen