В каталоге src по пути С:/Users/<Имя пользователя>/go (данный путь содержится в переменной GOPATH) у меня есть два подкаталога greeting и hi, соответствующие пакетам greeting и hi.
В greeting есть файл greeting.go:
package greeting
import "fmt"
func Hello() {
fmt.Println("Hello!")
}
func Hi() {
fmt.Println("Hi!")
}
В hi есть файл main.go:
package main
import "greeting"
func main() {
greeting.Hello()
greeting.Hi()
}
При выполнении команды go run main.go выводит такую ошибку:
main.go:3:8: package greeting is not in std (C:\Program Files\Go\src\greeting)
Содержимое папки src выглядит так:
C:\USERS\ASUS\GO\SRC
├───greeting
└───hi
Подскажите, по какой причине появляется ошибка main.go:3:8: package greeting is not in std (C:\Program Files\Go\src\greeting)?
Данный пример взят из книги по go, которую я изучаю, и там не используется файл go.mod
@alexangr Ошибка возникает потому, что Go ожидает, что ваш пакет greeting
будет доступен в рабочем пространстве Go, но он его не находит. Дело в том, что начиная с Go 1.17, работа с GOPATH изменилась, и теперь Go ожидает, что код будет находиться внутри модуля (с go.mod
), если не указано обратное.
GOPATH
в переменные окружения (если не установлен)Проверьте, установлен ли GOPATH
в переменных окружения. Введите в терминале:
1
|
go env GOPATH |
Если путь не соответствует C:\Users\<Имя пользователя>\go
, то настройте переменную окружения GOPATH
.
go run
с указанием GOPATH
Попробуйте выполнить команду, явно указывая GOPATH
:
1
|
GOPATH=C:\Users\<Имя пользователя>\go go run hi/main.go |
go install
Попробуйте сначала установить пакет greeting
, а затем запустить main.go
:
1 2 |
go install greeting go run hi/main.go |
go.mod
(если хотите современный способ)Если вы хотите работать без GOPATH, то рекомендуется использовать модули. Перейдите в папку hi
и выполните команду:
1
|
go mod init hi |
Затем отредактируйте main.go
, добавив полный путь импорта:
1 2 3 4 5 6 7 8 |
package main import "<Имя модуля>/greeting" func main() { greeting.Hello() greeting.Hi() } |
Затем выполните:
1
|
go run . |
Если вы хотите следовать примеру из книги, то самый простой способ — запустить go run
из GOPATH, указав правильные пути.