Sobes.tech
Middle

Ի՞նչ կարգով են կատարվում հետաձգված ֆունկցիաները (defer) Go-ում։

sobes.tech AI

Պատասխան AI-ից

Նետված գործառույթները կատարվում են հակառակ հերթականությամբ, ինչպես դրանք սահմանվել են, այսինքն՝ LIFO (Last-In, First-Out):

package main

import "fmt"

func main() {
	defer fmt.Println("առաջին") // Վերջին սահմանված
	defer fmt.Println("երկրորդ") // Նախորդ սահմանված
	defer fmt.Println("երրորդ") // Առաջին սահմանված
}

Արդյունքում, երբ այս կոդը գործարկվի, կարտադրվի.

երրորդ
երկրորդ
առաջին

Երբ դուրս եք գալիս scope-ից (ֆունկցիայից), որտեղ հայտարարվել է defer, հետաձգված գործառույթները կանչվում են հակառակ հերթականությամբ: Սա օգտակար է ռեսուրսների ազատման, ֆայլերի փակման, mutex-ների բացման և այլ մաքրման գործողությունների համար։