Ошибка импорта пакетов

A

Пользователь

от alexangr , в категории: Общие вопросы , 3 месяца назад

В каталоге 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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket

1 ответ

Администратор

от Stesha , 22 дня назад

@alexangr  Ошибка возникает потому, что Go ожидает, что ваш пакет greeting будет доступен в рабочем пространстве Go, но он его не находит. Дело в том, что начиная с Go 1.17, работа с GOPATH изменилась, и теперь Go ожидает, что код будет находиться внутри модуля (с go.mod), если не указано обратное.

Как исправить ошибку?

1. Добавить GOPATH в переменные окружения (если не установлен)

Проверьте, установлен ли GOPATH в переменных окружения. Введите в терминале:

1
go env GOPATH

Если путь не соответствует C:\Users\<Имя пользователя>\go, то настройте переменную окружения GOPATH.

2. Запустить go run с указанием GOPATH

Попробуйте выполнить команду, явно указывая GOPATH:

1
GOPATH=C:\Users\<Имя пользователя>\go go run hi/main.go

3. Использовать go install

Попробуйте сначала установить пакет greeting, а затем запустить main.go:

1
2
go install greeting
go run hi/main.go

4. Добавить 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, указав правильные пути.