Почему Go не может найти пакет импорта в подкаталоге проекта? - PullRequest
0 голосов
/ 31 октября 2019

Этот импорт работал нормально, когда я запускал приложение с dev_appserver.py

Я пытаюсь реорганизовать использование Firestore и Go 1.13

app.go content

package main
import (
    "net/http"
    "workout"
)

Структура проекта:

app.go  
|-- workout dir  
    |-- workout.go file that contains (package workout)  

Из корня рабочего каталога я запустил:
$ go run * .go

app.go:15:2: cannot find package "workout" in any of:
    /usr/local/go/src/workout (from $GOROOT)
    /Users/X/go/src/workout (from $GOPATH)
$ go run *.go workout/*.go
named files must all be in one directory; have ./ and workout/
X@MacBook-Pro Thu Oct 31 10:48:13 ~/Dropbox/go/src/workoutNew 
$ go build   
app.go:15:2: cannot find package "workout" in any of:
    /usr/local/go/src/workout (from $GOROOT)
    /Users/X/go/src/workout (from $GOPATH)

Ответы [ 2 ]

1 голос
/ 31 октября 2019
import (
 "workout"
)

Это попытается импортировать пакет stdlib с именем workout.

Чтобы импортировать ваш пакет workout, вы должны назвать свой основной пакет (используя go mod init), например:github.com/me/myapp, затем импортируйте пакет workout как github.com/me/myapp/workout.

Импорт workout в качестве относительного каталога ("./workout") также работает, но это не рекомендуемый способ сделать это.

0 голосов
/ 31 октября 2019

Ваши GOPATH и GOROOT:

/usr/local/go/src/workout (from $GOROOT)
/Users/X/go/src/workout (from $GOPATH)

Переместите свою рабочую папку в:

$GOPATH/my-app/
my-app
|...app.go
    workout
    |...workout.go

Обновление импорта:

package main
import (
    "net/http"
    "my-app/workout"
)

Теперь перейдите к:

cd $GOPATH/my-app/

Выполнить app.go:

go run app.go
...