Разница между go run ./path/dir и go run path / dir - PullRequest
0 голосов
/ 11 ноября 2019

Примечание: это не спрашивает Почему функции, определенные в других "основных" пакетах, не распознаются? .

У меня есть проект со следующей структурой:

go / src / github.com / me / project / cmd / web / main.go

# main.go
package main

import(
  "github.com/me/myproject/internal/myproject"
)

void main() {
  // ...
}

go / src / github.com / me /project / cmd / web / handlers.go

# handlers.go
package main

void someFunc() {
  // ...
}

И я успешно компилирую и запускаю:

go run ./cmd/web

Я также могу успешно работать с go run cmd/web/*.go

Однако, когда я пытаюсь запустить с go run cmd/web, почему компиляция завершается неудачно с выводом:

package cmd/web: package cmd/web is not in GOROOT (/usr/local/go/src/cmd/web)

Почему ./cmd/web работает, а cmd/web - нет?

1 Ответ

1 голос
/ 11 ноября 2019

Когда вы запускаете ./cmd/web, вы ссылаетесь на правильный каталог в вашем текущем дереве каталогов.

cmd/web однако относится к пакету, в котором находятся пакеты stdlib. Если вы попытаетесь запустить этот пример

go run net/http

, он скажет вам, что не может запустить его, потому что это не пакет main. Он нашел пакет stdlib net/http с таким именем;но поскольку cmd/web не существует, он не работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...