Ключевое слово :=
является сокращением для «присваивать новой переменной» - Go позволяет скрывать старые переменные с новыми переменными в более глубоких областях.
foo
существует в глобальной области, но вы 'Мы создали новый foo
внутри области действия init()
, поэтому внутри init()
, foo
затеняет глобальное foo
.
Более того, Go жалуется на неиспользуемые переменные в локальных областях.В этом случае ваш foo
в init()
не используется.
Итак, чтобы обойти это,
- Вы определили
foo
в глобальной области видимости - Вы ввели
init()
, а затем определили foo
в пределах init()
, скрывая глобальную foo
- Вы не использовали локальную переменную
foo
.
Если вы хотите установить глобальный foo, используйте =
, а не :=
, так как :=
создает новую переменную.