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 шт):

Автор решения: Pak Uula

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

→ Ссылка