2013-03-14 6 views
5

Вот дерево каталогов:Странный golang пакет импорта проблема

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

В main.go:

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

В client_test.go:

package client_test 
func Send() { 
} 

Ошибка:

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

Я читал How to use custom packages in golang?, и я думаю, что у меня было такое же решение, как этот парень, но я просто не знаю, как решить эту проблему. Пожалуйста помоги.

идти окр:

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

Каков ваш $ GOPATH, или еще лучше, выход' go env'? – zzzz

+0

'import' пытается найти указанный путь, начиная с каждого« рабочего пространства », который он извлекает из вашего' $ GOPATH', в свою очередь. Судя по вашему дереву, я бы сказал, что ваш '$ GOPATH' должен содержать'/some/path/to/project', то есть он должен включать этот каталог «project». Это относится к вашему делу? – kostix

+0

OARCH = "amd64" Гобин = "/ USR/местные/перейти/бен" GOCHAR = "6" GOEXE = "" GOGCCFLAGS = "- г -O2 -fPIC -m64 -pthread -fno-общий" GOHOSTARCH = "amd64" GOHOSTOS = "Darwin" GOOS = "Darwin" GOPATH = "/ Users/персонал/проекты/Minigame_Server" (это именно мой рабочий каталог) GOROOT = "/ USR/местные/идти" GOTOOLDIR = "/ usr/local/go/pkg/tool/darwin_amd64" CGO_ENABLED = "1" –

ответ

11

Command go, Test packages.

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

Не используйте зарезервированные имена. Например, замените client_test на clienttest.

+1

После некоторых тестов это правильное решение, спасибо! PS: имя пакета может содержать «_test», но имя файла не должно. –

0

Если $ GOPATH является "/ Users/персонал/проекты/Minigame_Server", ваш "проект" абсолютный путь должен быть «/ Users/персонал/проекты/Minigame_Server/SRC/проект».

Ваш импорт должен быть import "project/src/client_test".

Или, что вам кажется, что вы хотите сделать, учитывая, что в подпроекте «/ pkg» и «/ bin» имеются подкаталоги, связанные с Go, «GOPATH» для «/ Users/staff/projects/Minigame_Server/проект "

, а затем вы можете import "client_test". Основная идея заключается в том, что Go добавит строку импорта в $ GOPATH/src /.

(несколько неоднозначный, я согласен) документ находится здесь: http://golang.org/doc/code.html#tmp_2. Я предполагаю, что вы его прочитали, поэтому вы создали подкаталоги/pkg,/bin и/src, но catch - это то, где GOPATH должен быть, а затем неявный подуровень, автоматически добавленный Go, когда он ищет импорт (/ src автоматически добавляется), тогда строка импорта as-is.

1

ОК, наконец, я нашел то, что случилось с моей средой:

Поскольку я использую OS X, так что я использовал .pkg файл, чтобы установить идти, и GOROOT является «/ USR/местные/идут»

Затем я прочитал еще один поддельный учебник по установке GO, и он говорит, что мне нужно определить GOROOT в моем ~/.profile, поэтому я добавил «GOROOT =»/usr/local/go »внутри ~/.profile, тогда все пошло не так.

После внимательно прочитать официальный документ, я нашел это:

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

Но проблема в том, что это не произойдет, если вы добавите GOROOT в ~/.profile после установки .pkg, и он также не сказал, что вы не можете этого сделать.

Это мой ~ /.Профиль выглядеть как сейчас (исправляются):

экспорт GOPATH = $ HOME/проектов/ экспорт PATH = $ PATH: $ GOPATH/бен

КСТАТИ: вы не должны делать/папку проекта под рабочим пространством , По http://golang.org/doc/code.html#tmp_2, также did't говорят, что вы должны:

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

Вы смешиваете GOROOT и GOPATH? – Alexander

-1

Вы можете импортировать пакет в основном, используя следующий код будет работать импорта ( «FMT» »./client_test ") в основной упаковке

Смежные вопросы