2016-04-05 3 views
0

Я пытаюсь написать программу, где у меня есть структура вроде:Go ошибок пользовательского пакета импорт

Go/src/ 
    -github.com 
    -myname 
     -hello 
      main.go 
      -vector 
       vector.go 

Когда я импортировать пакет в моем коде внутри файла main.go, используя команду:

import(
    "vector" 
) 

Я получаю сообщение об ошибке:

Can't find package "vector" in any of: 
    C:\Go\src\vendor\vector (vendor tree) 
    C:\Go\src\vertex (from $GOROOT) 
    C:\Go\src\github.com\myname\src\vertex (from $GOPATH) 

Почему добавление src на этой последней строке? Не следует ли заменить src на папку hello, так как с этого момента я запускаю файл? Кроме того, он запускается, если я импортирую его из полной файловой структуры, например github.com/myname/hello/vertex, которая мне кажется странной.

Я использую go run hello.go, чтобы упростить мое взаимодействие с программой.

ответ

3

Ваш Go-код (в отличие, чтобы пойти STDLIB) предназначается, чтобы быть под $GOPATH/src (редактирование: не$GOROOT, как я сказал вначале), и это стандарт, чтобы всегда использовать полный путь импорта, в вашем случае, начиная с github.com/ (даже если вы выяснили способ избежать необходимости).

Более How to Write Go Code командой Go, а также другие ответы здесь, описывающие project layout и the first steps to setting a workspace up.

+0

Итак, если я правильно понял, мой персональный код отправляется в '$ GOROOT/src', но если я импортирую репо из чужого кода, я бы поместил его в' $ GOROOT/src/github.com/username/reponame'? – Rob

+1

Код пользователя должен находиться под $ GOPATH [/ src], а не $ GOROOT [/ src]. – cd1

+0

@ cd1 ugh, очень жаль, исправлено – twotwotwo

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