Пакет Golang отсутствует в GOROOT (/ usr/local/go/src/packageName)

#go #module

#Вперед #модуль

Вопрос:

Привет, кто-нибудь может помочь мне запустить мой main.go: go run main.go ?

Есть две папки, которые находятся рядом друг с другом:

в папке proj1 есть main.go, go.mod

в папке package1 есть package1.go, go.mod, utility.go

внутри main.go:

 package main

import (
    "package1"
    "fmt"
)

func main() {
    y := package1.Struct1{
        v: "1",
    }
    z := package1.isTrue()
    fmt.Println(z)
}
  

внутри моей папки пакета: package1.go

 package package1

type Package1 struct {}

func (a *Package1) IsTrue() bool {
    return true
}
  

Моя версия Go: go1.15.2 linux / amd64

Мои настройки Go env:

 GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/user1/.cache/go-build"
GOENV="/home/user1/.config/go/env"
GOMODCACHE="/mnt/sda5/gopath/pkg/mod"
GOOS="linux"
GOPATH="/mnt/sda5/gopath"
GOROOT="/usr/local/go"
...
  

Я пытался :
перейдите к установке, перейдите к сборке… результаты ошибки внутри папки пакета отсутствуют

перейдите к поставщику мода, запустите main.go, перейдите к get -u package1 … результат в том же сообщении при запуске внутри папки proj1:

пакет package1 отсутствует в GOROOT (/ usr/local/go/src/package1)

Линтер плагина VS Code Go не показывает никаких проблем. Пожалуйста, помогите. Спасибо!

Комментарии:

1. Это не то, как используются модули или как компилируется пакет. Как написать код Go , шаг за шагом проходит через этот же тип примера.

2. Если вы правильно установите последнюю версию Go, я сомневаюсь, что вам нужно будет просматривать или изменять какие-либо переменные среды. Другими словами, я думаю, что принятый ответ в основном устарел. Рекомендуемая ссылка @JimB также устарела. По состоянию на 2022 год go.dev/ doc , вероятно, является хорошей отправной точкой.

Ответ №1:

Чтобы устранить ошибку, с которой я столкнулся package package1 is not in GOROOT (/usr/local/go/src/package1)

Я должен был убедиться, что переменные среды были правильно настроены.

Я добавил эти строки в bashrc файл:

 export GO111MODULE=on
#GOPATH MUST BE OUTSIDE OF GOROOT directory!!!
export GOPATH=/mnt/sda1/programming/gopath
export PATH=$PATH:$GOPATH/bin

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
  

Я загрузил bashrc файл в терминал:

 source ~/.bashrc
  

Теперь я могу выполнить следующую процедуру для программирования на языке Go.

Создайте новую main папку… Внутри этой main папки: создайте main.go файл, начинающийся с package main

Выполните команду ниже:

 go mod init main
  

создайте другую папку с новым именем пакета: например package1

внутри package1 папки: создайте все файлы package package1 в 1-й строке… но НЕ СОЗДАВАЙТЕ ФАЙЛ MOD внутри этой папки пакета!!!

в вашем main.go вы можете импортировать этот пакет и использовать его

 import "main/package1"
y := package1.Struct1{a: 1, b: 2,...}
z := y.func1()
  

Комментарии:

1. Мне нужно объяснение по этому поводу.

2. в какой части вам нужно объяснение?

3. Похоже на список волшебных танцевальных шагов? Если бы вы могли объяснить, что делает каждый шаг и почему мы это делаем

4. привет, я обновил ответ. пожалуйста, посмотрите.

Ответ №2:

Эта страница является лучшим результатом поиска…

пакет xxxxx отсутствует в GOROOT (/ usr / lib/go/src/xxxxx)

В моем случае я пытался:

go build mything

Это выдало мне ошибку. Решение было простым, мне нужно было быть более конкретным:

go build mything.go

Комментарии:

1. Спасибо за предоставление этого ответа. Я действительно искал это и оказался здесь, и это то, что решило это для меня.

Ответ №3:

Я столкнулся с той же проблемой, но в моем случае я забыл .go поэтому после запуска: проблема: go run основное решение: go run main.go и теперь он работает нормально