Подтвердить что ты не робот

Что такое "_" (подчеркивание через запятую) в объявлении Go?

И я не могу понять этот вид объявления переменных:

_, prs := m["example"]

Что именно делает " _, " и почему они объявили переменную, подобную этой, вместо

prs := m["example"]

(Я нашел это как часть Go by Example: Maps)

4b9b3361

Ответ 1

Это позволяет избежать объявления всех переменных для значений возвращаемых значений.
Он называется пустой идентификатор.

Как в:

_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

(другой вариант использования < _ для импорта)

Так как он отбрасывает возвращаемое значение, полезно, когда вы хотите проверить только одно из возвращаемых значений, как в Как проверить существование ключа на карте? "показано в" Эффективный переход, карта":

_, present := timeZone[tz]

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

Как Jsor добавляет в комментариях:

"общепринятый стандарт" заключается в том, чтобы вызывать тестовые переменные членства "ok" (это же для проверки правильности чтения канала)

Это позволяет вам комбинировать его с тестом:

if _, err := os.Stat(path); os.IsNotExist(err) {
    fmt.Printf("%s does not exist\n", path)
}

Вы найдете его также в цикле:

Если вам нужен только второй элемент в диапазоне (значение), используйте пустой идентификатор, подчеркивание, чтобы отменить первый:

sum := 0
for _, value := range array {
    sum += value
}

Ответ 2

Компилятор Go не позволит вам создавать переменные, которые вы никогда не используете.

for i, value := range x {
   total += value
}

Приведенный выше код вернет сообщение об ошибке "i объявлено и не используется".

Поскольку мы не используем я внутри нашего цикла, нам нужно изменить его на это:

for _, value := range x {
   total += value
}

Ответ 3

_ - пустой идентификатор. Значение, которое должно быть назначено, отбрасывается.

Здесь это значение ключа example, которое отбрасывается. Вторая строка кода отбрасывает наличие логического значения и сохраняет значение в prs.
Таким образом, чтобы проверить наличие на карте, вы можете отказаться от значения. Это можно использовать для использования карты в качестве набора.

Ответ 4

Он называется пустым идентификатором и помогает в тех случаях, когда вы хотите отбросить значение, которое будет возвращено, а не ссылаться на него.

Некоторые места, где мы используем это:

  • Функция возвращает значение, и вы не собираетесь использовать его в будущем
  • Вы хотите повторить и нуждаетесь в значении i, которое вы не будете использовать

Ответ 5

Пустой идентификатор может использоваться всякий раз, когда синтаксис требует имя переменной, а логика программы - нет, например, для отбрасывания индекса нежелательного цикла, когда нам требуется только значение элемента.

Выдержка из:

Язык программирования Go (серия профессиональных вычислений Addison-Wesley)

Брайан В. Керниган

Этот материал может быть защищен авторским правом.

Ответ 6

По сути, _, известный как пустой идентификатор. В GO у нас не может быть переменных, которые не используются.

Например, когда вы перебираете массив, если используете значение: = диапазон, вы не хотите использовать значение i для перебора. Но если вы опустите значение i, это вернет ошибку. Но если вы объявите я и не используете его, он также вернет ошибку.

Поэтому это место, где мы должны использовать _,

Также он используется, когда вы не хотите, чтобы функция возвращала значение в будущем.

Ответ 7

Неиспользуемая переменная не допускается в Голанге

Если вы пришли из других языков программирования, это может быть немного трудно привыкнуть к этому. Но это приводит к более чистому коду. Итак, используя _ мы говорим, что знаем, что там есть переменная, но мы не хотим ее использовать, и сообщаем компилятору, который не жалуется на это. :)