Подтвердить что ты не робот

Голанская переменная undefined

У меня есть 2 файла go

/Users/username/go/src/Test/src/main/Test.go

package main

import "fmt"

func main() {
    fmt.Printf(SomeVar)
}

и файл /Users/username/go/src/Test/src/main/someFile.go

package main

const SomeVar = "someFile"

Однако я постоянно получаю ошибку компилятора

/Users/username/go/src/Test/src/main/Test.go:6: undefined: SomeVar

Может кто-нибудь объяснить мне, почему SomeVar labeld как undefined?

4b9b3361

Ответ 1

Try

go run Test.go someFile.go

Ответ 2

Цитата:

Я думаю, вы неправильно понимаете, как работает инструмент go. Вы можете "пойти" build "в каталоге, и он построит весь пакет (пакет определенные как все .go файлы в каталоге). То же самое для go install, go тест и т.д. Идет только запуск, который требует указать конкретные файлы... он действительно предназначен только для очень маленьких программ, которые обычно нуждаются только в одном файле.

Итак:

go build && ./program_name

См. также

Ответ 3

Правильный код:

  • someFile.go и Test.go относятся к одному и тому же пакету (main)
  • SomeVar - это const, объявленный на верхнем уровне, поэтому он имеет область блока пакетов, а именно область
  • как результат, SomeVar видна и может быть доступна в обоих файлах

(если вам нужно просмотреть обзор в Go, см. "Спецификация языка - декларации и область применения" ).

Почему вы получаете ошибку undefined?

Вероятно, вы запустили go build Test.go или go run Test.go, оба из которых произвели следующий вывод, если он запущен с /Users/username/go/src/Test/src/main:

# command-line-arguments
./Test.go:6: undefined: SomeVar

Здесь вы можете найти причину: Команда go

Если вы запустите go build или go run со списком файлов .go, он рассматривает их как список исходных файлов, определяющих один пакет, т.е. он считает, что в main, следовательно, ошибка. Решение включает в себя все необходимые файлы .go:

go build Test.go someFile.go

go run Test.go someFile.go

go build также будет работать без аргументов, создавая все файлы, которые он находит в пакете, в результате:

go build

Примечание 1: приведенные выше команды относятся к локальному пакету и, как таковой, должны быть запущены из каталога /Users/username/go/src/Test/src/main

Примечание 2: хотя другие ответы уже предлагали действительные решения, я решил добавить здесь несколько подробностей, чтобы помочь сообществу, так как это общий вопрос, когда вы начинаете работать с Go:)