Вот как организованы исходные файлы
✘-1 ~/Go/src/github.com/krmahadevan/packages
18:24 $ tree .
.
├── sample_main.go
└── sample_one.go
0 directories, 2 files
Вот как выглядит исходный код:
sample_one.go
package main
var data map[string]string
func init() {
data = make(map[string]string, 0)
}
sample_one.go
package main
import "fmt"
func main() {
data["foo"] = "bar"
fmt.Println(data)
}
Теперь, когда я пытаюсь запустить sample_main.go , я получаю сообщение о том, что data
не определено.
18:24 $ go run sample_main.go
# command-line-arguments
./sample_main.go:6:2: undefined: data
./sample_main.go:7:14: undefined: data
✘-2 ~/Go/src/github.com/krmahadevan/packages
Но когда я собираю код в двоичный файл и затем выполняю его, он работает нормально.
✔ ~/Go/src/github.com/krmahadevan/packages
18:27 $ go build
✔ ~/Go/src/github.com/krmahadevan/packages
18:28 $ ./packages
map[foo:bar]
✔ ~/Go/src/github.com/krmahadevan/packages
Я хотел бы понять, почему это поведение?
Окружающая среда:
18:31 $ go version
go version go1.11.4 darwin/amd64
Ближе всего я нашел этот пост: Голанг: аргументы командной строки undefined: переменная
Но в этом посте говорится о переменных области действия, которые определены в main
.
Но моя постановка проблемы включает переменные, определенные в другом файле go и доступ к которым осуществляется методом main
.