English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Golang

Контрольные операторы Golang

Функции и методы Golang

Структуры Golang

Срезы и массивы Golang

Строки (String) Golang

Указатели Golang

Интерфейсы Golang

Конкурентоспособность Golang

Исключения (Error) Golang

Другие аспекты Golang

Ключевое слово Defer в Go

в Go языке, оператор defer откладываетфункцияили метод илиАнонимный методвыполнение, пока не вернется ближайшая функция. Иными словами, вызовы функций откладываются, но они выполняются до тех пор, пока не вернется ближайшая функция. Вы можете использовать ключевое слово defer для создания отложенных методов, функций или анонимных функций.

Грамматика:

// Функция
defer func func_name(parameter_list Type) return_type{
    // Code
}
// 方法
defer func (receiver Type) method_name(parameter_list){
    // Code
}
defer func (parameter_list)(return_type){
    // code
}()

Внимание:

  • В языке Go в одном и том же программном обеспечении разрешено использование нескольких выражений defer, и они выполняются в порядке LIFO (last in, first out), как показано в примере 2.

  • В выражениях defer параметры оцениваются в момент выполнения выражения defer (а не при их вызове).

  • defer-выражения обычно используются для обеспечения закрытия файлов после завершения обработки файла, закрытия каналов или捕获紧急 ситуаций в программе.

Позвольте нам обсудить этот концепт с помощью примера:

Пример 1:

package main
import "fmt"
// Функция
func mul(a1, a2 int) int {
    res := a1 * a2
    fmt.Println("Результат: ", res)
    return 0
}
func show() {
    fmt.Println("Привет!, ru.oldtoolbag.com Учебник по основам языка Go")
}
func main() {
    //Вызов функции mul()
    //Здесь поведение функции mul()
    //Как обычная функция
    mul(23, 45)
    //Вызов функции mul()
    //Использование ключевого слова defer
    //Здесь функция mul()
    //является задержанной функцией
    defer mul(23, 56)
    //Вызов функции show()
    show()
}

Вывод:

Результат:  1035
Привет!, ru.oldtoolbag.com Учебник по основам языка Go
Результат:  1288

Объяснение использования:В данном примере у нас есть две функции с именемmul()иshow()функции функции. Средиshow()Функция обычно вmain()функции, при этом мы вызываем её двумя различными способамиmul()Функция:

  • В первую очередь, мы вызываем её, как обычную функцию:mulфункции, то есть mul(23,45) и выполняем её при вызове функции (вывод: Результат: 1035).

  • Вторым, мы используем ключевое слово defer дляmul()Функция называется задержанной функцией, то есть defer mul( 23,56),когда все окружающие методы возвращаются, он будет выполнен (вывод: Результат: 1288).

Пример 2:

package main 
  
import "fmt"
  
// Функция
func add(a1, a2 int) int { 
    res := a1 + a2 
    fmt.Println("Результат: ", res) 
    return 0 
} 
  
func main() { 
  
    fmt.Println("Старт") 
  
    //Множество задержанных выражений
    //Выполнение в порядке LIFO
    defer fmt.Println("Конец") 
    defer add(34, 56) 
    defer add(10, 10) 
}

Вывод:

Старт
Результат:  20
Результат:  90
Конец