Почему компилятор Go не видит подключенный сторонний пакет?
OS Windows.
GOPATH = C:\Users\User\go\
Устанавливаю сторонний пакет: go install github.com/go-sql-driver/mysql@latest
Встал нормально.
Но, при компиляции ошибка: go.mod file not found in current directory or any parent directory.
Почему так? Помимо инсталляции пакета, нужно ещё что-то колдовать с файлом go.mod? Или в чём дело?
Попробовал сделать файл go.mod: go mod init github.com/go-sql-driver/mysql
Вроде сделалось. Но всё равно не компилируется: "$GOPATH/go.mod exists but should not".
UPD. Редактор VS Code тоже пишет ошибку:
Failed to run 'C:\Program Files\Go\bin\go.exe env' (cwd: undefined): Error: Command failed: C:\Program Files\Go\bin\go.exe env -json GOPATH GOROOT GOPROXY GOBIN GOMODCACHE
$GOPATH/go.mod exists but should not
Ответы (2 шт):
Смотри, вот у тебя проект до инициализации go.mod
[
Попробуем собрать, получим ошибку "go.mod file not found in current directory or any parent directory"
Теперь выполним инициализацию, при помощи:
go mod init ИМЯ_ТВОЕГО_ПРОЕКТА
и теперь проект будет собираться без ошибок.
После инициализации (go mod init) можно уже подтянуть нужную тебе либу и использовать ее, выполняем:
go get github.com/go-sql-driver/mysql@latest
после этого у тебя сгенерирует файлик go.sum, а в go.mod добавиться информация о зависимости от подтянутой либы и ты сможешь спокойно ее использовать:
Вам нужно работать вне $GOPATH. Начиная с go v1.11 эта папка используется для кэширования модулей и установки бинарников командой go install. Свой код в $GOPATH уже давно не разрабатывают.
Перенесите свой проект в какую-нибудь другую папку, например C:\work\go - конкретное имя не важно. Нужно только, чтобы эта папка была вне пути C:\Users\User\go\
В папке C:\work\go создайте go.mod:
go mod init my-project
Имя, стоящее после init использует go build для имени собираемого исполнимого файла.
Проверьте, что go.mod есть. Теперь можете добавлять стороннюю библиотеку:
go get github.com/go-sql-driver/mysql@latest
В последнее время команды go get и go install развели - теперь go install устанавливает бинарник (то есть скачивает, компилирует, сохраняет результат в $GOPATH/bin), но не добавляет модуль в зависимости. Для добавления зависимости используйте go get.
Теперь всё должно компилироваться.
PS. Странно, что команда go install у вас сработала. Так быть не должно.
Вот что мне выдал go v1.21:
$ go install github.com/go-sql-driver/mysql@latest
go: downloading github.com/go-sql-driver/mysql v1.7.1
package github.com/go-sql-driver/mysql is not a main package

