Как отложить или задержать вызов внутренней функции до тех пор, пока внешняя или окружающая функция не завершит свое выполнение в Go или Golang?

Первоначально было опубликовано здесь!

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

TL;DR

package main

import "fmt"

// function that prints string to the terminal
func sayBye(){
    fmt.Println("Bye, Have a nice day!")
}

func main(){
    // postpone or defer the `sayBye()` function call until the
    // `main()` function execution completes
    defer sayBye()

    fmt.Println("I will be executed first")
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Например, допустим, у нас есть функция sayBye(), которая печатает Bye, Have a nice day! пользователю только после завершения выполнения функции main.

Для этого сначала сделаем функцию sayBye(), которая печатает строку Bye, Have a nice day! на консоль или терминал следующим образом,

package main

import "fmt"

// function that prints string to the terminal
func sayBye(){
    fmt.Println("Bye, Have a nice day!")
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Теперь в верхней части функции main() мы можем использовать ключевое слово defer, за которым следует вызов функции sayBye(), как показано ниже,

package main

import "fmt"

// function that prints string to the terminal
func sayBye(){
    fmt.Println("Bye, Have a nice day!")
}

func main(){
    // postpone or defer the `sayBye()` function call until the
    // `main()` function execution completes
    defer sayBye()
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Поскольку у нас не так много строк кода, чтобы увидеть корректную работу, добавим еще одну функцию Println(), чтобы показать строку I will be executed first после оператора defer, как показано здесь,

package main

import "fmt"

// function that prints string to the terminal
func sayBye(){
    fmt.Println("Bye, Have a nice day!")
}

func main(){
    // postpone or defer the `sayBye()` function call until the
    // `main()` function execution completes
    defer sayBye()

    fmt.Println("I will be executed first")
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Результат выполнения приведенного выше кода будет выглядеть следующим образом,

I will be executed first
Bye, Have a nice day!
Ввести полноэкранный режим Выйти из полноэкранного режима

Как видите, строка I will be executed first отображается перед строкой Bye, Have a nice day!, несмотря на то, что она оценивается первой.

Мы успешно отложили или отсрочили вызов функции. Ура 🥳.

Посмотрите приведенный выше код в реальном времени в The Go Playground.

Вот и все 😃!

Не стесняйтесь поделиться, если вы нашли это полезным 😃.


Оцените статью
devanswers.ru
Добавить комментарий