Почему компилятор 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 шт):

Автор решения: Geroy206

Смотри, вот у тебя проект до инициализации go.mod

[До инициализации go.mod3

Попробуем собрать, получим ошибку "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 добавиться информация о зависимости от подтянутой либы и ты сможешь спокойно ее использовать:

→ Ссылка
Автор решения: Pak Uula

Вам нужно работать вне $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
→ Ссылка