Programa Golang que usa la palabra clave diferir

El uso principal de la palabra clave defer en go es que se utiliza para limpiar los recursos utilizados por archivos abiertos, conexiones de red, identificadores de bases de datos, etc. Esto ayuda a reducir las posibilidades de error al mantener la llamada para cerrar archivos/funciones más cerca. para llamar a las declaraciones abiertas. La declaración seguida por la palabra clave defer se coloca en una pila y, al final, se llaman de acuerdo con el orden de último en entrar, primero en salir (LIFO).

Ejemplo:

package main
  
import "fmt"
  
func main() {
    defer fmt.Println("First")
    defer fmt.Println("Second")
    fmt.Println("Last")
}

Producción:

Last
Second
First

Aquí puede ver que los estados de cuenta se imprimen de acuerdo con el LIFO. Pero esto no es para lo que está hecho el aplazamiento, por lo que buscaremos un programa para comprender el uso principal de la palabra clave aplazar.

Ejemplo:

func write(fileName string, text string) error {
    file, err := os.Create(fileName)
    if err != nil {
        return err
    }
    _, err = io.WriteString(file, text)
    if err != nil {
        return err
    }
    file.Close()
    return nil
}

En esto, si la función io.WriteString falla, el programa devolverá el error «err» y no podrá cerrar el archivo, y esto resultará en el desperdicio de recursos, por lo tanto, diferir aquí será útil.

func write(fileName string, text string) error {
    file, err := os.Create(fileName)
    if err != nil {
        return err
    }

 // This statement will surely run at the end no 
 // matter what the program goes through.
  defer file.Close()
 
    _, err = io.WriteString(file, text)
    if err != nil {
        return err
    }

    return file.Close()
}

En este programa, la declaración defer file.Close() se ejecutará al final de la función, si hay un error en el programa, entonces podrá cerrar el archivo que se abrió anteriormente en el programa y, por lo tanto, guardar el recursos. A continuación se muestra el programa completo para el mismo.

package main
  
import (
    "io"
    "log"
    "os"
)
  
func main() {
    if err := write("readme.txt", "This is a readme file"); err != nil {
        log.Fatal("failed to write file:", err)
          
    }
}
  
func write(fileName string, text string) error {
    file, err := os.Create(fileName)
    if err != nil {
        return err
    }
    defer file.Close()
    _, err = io.WriteString(file, text)
    if err != nil {
        return err
    }
  
    return file.Close()
}

Publicación traducida automáticamente

Artículo escrito por shirshak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *