Ответ 1
Try
go run Test.go someFile.go
У меня есть 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?
Try
go run Test.go someFile.go
Я думаю, вы неправильно понимаете, как работает инструмент go. Вы можете "пойти" build "в каталоге, и он построит весь пакет (пакет определенные как все .go файлы в каталоге). То же самое для go install, go тест и т.д. Идет только запуск, который требует указать конкретные файлы... он действительно предназначен только для очень маленьких программ, которые обычно нуждаются только в одном файле.
Итак:
go build && ./program_name
Правильный код:
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:)