Go не видит модуль
установил go, всё работает, но не видит установленные модули gorm.io/gorm и gorm.io/drivers/postgres.
Версия go=go1.22.4, GO111MODULE=off. Устанавливал модули так
PS E:\GoProjects> go install gorm.io/gorm@latest
go: downloading gorm.io/gorm v1.25.10
go: downloading github.com/jinzhu/now v1.1.5
go: downloading github.com/jinzhu/inflection v1.0.0
package gorm.io/gorm is not a main package
Импортирую так
import (
"fmt"
"gorm.io/gorm"
"gorm.io/driver/postgres"
)
Выдаёт вот такую ошибку
main.go:6:2: cannot find package "gorm.io/driver/postgres" in any of:
C:\Program Files\Go\src\gorm.io\driver\postgres (from $GOROOT)
C:\Users\Борис\go\src\gorm.io\driver\postgres (from $GOPATH)
main.go:5:2: cannot find package "gorm.io/gorm" in any of:
C:\Program Files\Go\src\gorm.io\gorm (from $GOROOT)
C:\Users\Борис\go\src\gorm.io\gorm (from $GOPATH)
GOROOT и GOPATH такие
PS E:\GoProjects> go env GOROOT
C:\Program Files\Go
PS E:\GoProjects> go env GOPATH
C:\Users\Борис\go
Сам gorm.io установился в $(GOPATH)/pkg/mod/
C:\Users\Борис\go\pkg\mod
Выглядят при скачке так
Хочется узнать, нормально ли, что ищется модуль в папках с суффиксом /src, а устанавливается только в /pkg/mod? Что делать
Ответы (1 шт):
go install
устанавливает исполняемый файл в $GOPATH/bin
. Эта команда завершается с ошибкой, так как требуется указать путь к пакету main
, а по пути gorm.io/gorm
находится пакет gorm
, а не main
, о чем вам сообщает go
: package gorm.io/gorm is not a main package
В любом случае go install
вам не подходит. Вам нужно добавить зависимость, а не скомпилировать чужой бинарник.
То, что в $GOPATH/mod
есть папка [email protected]
, вам никак не поможет, так как go
берёт информацию о зависимостях из файлов go.mod
и go.sum
Зависимости в эти файлы добавляются командой go get
:
go get gorm.io/gorm@latest
Пример вывода:
go: added github.com/jinzhu/inflection v1.0.0
go: added github.com/jinzhu/now v1.1.5
go: added gorm.io/gorm v1.25.10
Содержимое go.mod
после добавления зависимостей:
module example.org/some
go 1.21.4
require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
gorm.io/gorm v1.25.10 // indirect
)
Содержимое go.sum
:
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s=
gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
Именно эти записи ищет go
, чтобы решить, с какими версиями сторонних модулей нужно компилировать ваш код, а не содержимое кэша модулей в GOPATH/mod