Шаг 68.
Язык программирования Go.
Инструкция defer

    На этом шаге рассмотрим инструкцию defer.

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

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

/*типичный способ открытия файла и
откладывания операции его закрытия в случае успеха*/
var file *os.File
var err error
if file, err = os.Open(filename); err != nil {
    log.Println("Ошибка открытия файла: ", err)
    return
}
defer file.Close()

    Такой способ создания некоторого значения и откладывания вызова некоторой функции закрытия, освобождающей ресурсы, занятые этим значением, перед тем как это значение будет утилизировано сборщиком мусора, является стандартным в языке Go. Этот прием можно использовать и при работе со значениями пользовательских типов, реализующих функцию Close() или Cleanup(), которую можно было бы передать инструкции defer, хотя на практике необходимость в этом возникает достаточно редко.

    На следующем шаге рассмотрим функции panic() и recover().


Предыдущий шаг Содержание Следующий шаг