И я не могу понять этот вид объявления переменных:
_, prs := m["example"]
Что именно делает " _,
" и почему они объявили переменную, подобную этой, вместо
prs := m["example"]
(Я нашел это как часть Go by Example: Maps)
И я не могу понять этот вид объявления переменных:
_, prs := m["example"]
Что именно делает " _,
" и почему они объявили переменную, подобную этой, вместо
prs := m["example"]
(Я нашел это как часть Go by Example: Maps)
Это позволяет избежать объявления всех переменных для значений возвращаемых значений.
Он называется пустой идентификатор.
Как в:
_, 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
}
Компилятор Go не позволит вам создавать переменные, которые вы никогда не используете.
for i, value := range x {
total += value
}
Приведенный выше код вернет сообщение об ошибке "i объявлено и не используется".
Поскольку мы не используем я внутри нашего цикла, нам нужно изменить его на это:
for _, value := range x {
total += value
}
_
- пустой идентификатор. Значение, которое должно быть назначено, отбрасывается.
Здесь это значение ключа example
, которое отбрасывается. Вторая строка кода отбрасывает наличие логического значения и сохраняет значение в prs
.
Таким образом, чтобы проверить наличие на карте, вы можете отказаться от значения. Это можно использовать для использования карты в качестве набора.
Он называется пустым идентификатором и помогает в тех случаях, когда вы хотите отбросить значение, которое будет возвращено, а не ссылаться на него.
Некоторые места, где мы используем это:
Пустой идентификатор может использоваться всякий раз, когда синтаксис требует имя переменной, а логика программы - нет, например, для отбрасывания индекса нежелательного цикла, когда нам требуется только значение элемента.
Выдержка из:
Язык программирования Go (серия профессиональных вычислений Addison-Wesley)
Брайан В. Керниган
Этот материал может быть защищен авторским правом.
По сути, _,
известный как пустой идентификатор. В GO у нас не может быть переменных, которые не используются.
Например, когда вы перебираете массив, если используете значение: = диапазон, вы не хотите использовать значение i для перебора. Но если вы опустите значение i, это вернет ошибку. Но если вы объявите я и не используете его, он также вернет ошибку.
Поэтому это место, где мы должны использовать _,
Также он используется, когда вы не хотите, чтобы функция возвращала значение в будущем.
Неиспользуемая переменная не допускается в Голанге
Если вы пришли из других языков программирования, это может быть немного трудно привыкнуть к этому. Но это приводит к более чистому коду. Итак, используя _
мы говорим, что знаем, что там есть переменная, но мы не хотим ее использовать, и сообщаем компилятору, который не жалуется на это. :)