Sobes.tech
Middle

Kas yra defer operatorius Go kalboje?

sobes.tech AI

Atsakymas iš AI

defer operatorius naudojamas funkcijos ar metodo vėlavimui vykdyti. Funkcijos, pažymėtos defer, vykdomos būtent prieš išeinant iš jų esančios funkcijos pabaigą.

defer veikimo principai:

  • Vykdomas išėjus iš dabartinės funkcijos, nesvarbu, ar tai būtų normalus išėjimas, ar panikos iššaukimas.
  • Kelios defer funkcijos vienoje funkcijoje vykdomos LIFO (Last-In, First-Out) tvarka.
  • Naudinga išvalyti išteklius, pvz., uždaryti failus ar tinklo ryšius.

Pavyzdys:

package main

import (
	"fmt"
	"os"
)

func main() {
	fmt.Println("Atidaromas failas.")

	file, err := os.Open("example.txt")
	if err != nil {
		// Klaidos apdorojimas
		return
	}

	// Atidėtas failo uždarymas
	defer file.Close()
	defer fmt.Println("Failas bus uždarytas.") // Šis `defer` bus vykdomas pirmas (LIFO)

	fmt.Println("Apdorojamas failas...")

	// Papildomas darbas su failu
}

Programos išvestis:

Atidaromas failas.
Apdorojamas failas...
Failas bus uždarytas.