Почему я получаю сообщение об ошибке в методе GO init ()? - PullRequest
0 голосов
/ 13 апреля 2019

Итак, я понимаю, что в go init () - это специальный метод, который можно использовать для инициализации объекта в пакете.Когда я пытаюсь использовать эту технику, я получаю сообщение об ошибке, что переменная объявлена ​​и не используется.Например:

package fizzbuzz

var foo string

func init() {
    foo := "bar"
}

Мне кажется, что большинство переменных времени, которые вы указали в этом методе, не будут использоваться локально для int (), так что это нормально.Чего мне не хватает?

Ответы [ 3 ]

3 голосов
/ 13 апреля 2019

Это просто создает локальную переменную с именем "foo" внутри метода. Вам необходимо присвоить строку уже объявленной переменной var в области видимости модуля через foo = "bar".

0 голосов
/ 13 апреля 2019

Ключевое слово := является сокращением для «присваивать новой переменной» - Go позволяет скрывать старые переменные с новыми переменными в более глубоких областях.

foo существует в глобальной области, но вы 'Мы создали новый foo внутри области действия init(), поэтому внутри init(), foo затеняет глобальное foo.

Более того, Go жалуется на неиспользуемые переменные в локальных областях.В этом случае ваш foo в init() не используется.

Итак, чтобы обойти это,

  • Вы определили foo в глобальной области видимости
  • Вы ввели init(), а затем определили foo в пределах init(), скрывая глобальную foo
  • Вы не использовали локальную переменную foo.

Если вы хотите установить глобальный foo, используйте =, а не :=, так как := создает новую переменную.

0 голосов
/ 13 апреля 2019

In Go foo:="bar" - это короткий оператор присваивания, который можно использовать в функции вместо объявления var.

Итак, по сути, вы объявили новую переменную foo внутри метода init вместо того, чтобы использовать глобальную foo

...