Почему компилятор жалуется на неиспользуемую переменную в этом случае (когда она используется fmt.Fprintf)? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть простой кусок кода, в котором я хочу преобразовать элементы среза в json, а затем распечатать их на моем http.responseWriter.

for _, element := range customers {
    result, _ := json.Marshal(element)
    fmt.Fprintf(w, string(result))
}

Однако, когда я компилирую это, я получаю ошибку "результат объявлен и не используется". Если я добавлю простую строку:

_ = result

Тогда все компилируется и работает нормально. Почему компилятор жалуется на это использование, и как правильно сделать это на ходу?

Любое понимание приветствуется, мои поиски пока что показывают, что вызов Fprintf должен учитываться как использование.

1 Ответ

0 голосов
/ 08 ноября 2018

Код, о котором идет речь, не приводит к опубликованной ошибке, для доказательства проверьте ее на Go Playground .

Эта ошибка обычно есть (и операция подтвердила, что она слишкомв этом случае) вызвано наличием локальной переменной с тем же именем вне блока, и при использовании краткого объявления переменной эта тень скрывается.

Эта ошибка может быть воспроизведена с помощью следующейкод:

var result []byte

customers := []int{}
w := os.Stdout

for _, element := range customers {
    result, _ := json.Marshal(element)
    fmt.Fprintf(w, string(result))
}

При попытке скомпилировать и запустить его мы получаем ошибку (попробуйте на Go Playground ):

prog.go:10:6: result declared and not used

Решение заключается в использованиипростое присваивание вместо краткого объявления переменной, если намерение состоит в том, чтобы использовать существующую переменную (в этом случае новая переменная не будет создана), или использовать другое имя для переменной, если намерение не заключается в использованиивнешняя, существующая переменная (но тогда внешняя переменная должна быть удалена или, конечно, использоваться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...