воскресенье, 27 января 2019 г.

Эффективный Go: пустой идентификатор

Мы уже упоминали пустой идентификатор пару раз в контексте for range циклов и карт. Пустой идентификатор может быть назначен или объявлен с любым значением любого типа, со значением отброшенным без каких-либо последствий. Это немного похоже в Unix на запись в файл /dev/null: это представляет значение доступное только для записи, для использования в качестве заполнителя, где переменная необходима, но фактическое значение не имеет значения. В этом и следующих постах будут представлены еще несколько вариантов использования пустого идентификатора.

Пустой идентификатор в множественном назначении

Использование пустого идентификатора в цикле for range - это частный случай общей ситуации: множественное назначение.

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

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

Иногда вы увидите код, который отбрасывает значение ошибки с целью игнорирования ошибки; это ужасная практика. Всегда проверяйте возвращаемые ошибки; они предоставлены не просто так, а по какой-то причине, на которую стоит обратить внимание.

// Плохо! 
// Этот код завершится падением если путь не существует.
fi, _ := os.Stat(path)
if fi.IsDir() {
    fmt.Printf("%s is a directory\n", path)
}


Читайте также:


Комментариев нет:

Отправить комментарий