Pasar al contenido principal
Alexys Lozada
José Luján
Manuel Rodriguez
José Luján
Luis Avilés
Álvaro Felipe
José Luján
Beto Quiroga
Jonathan MirCha
Jonathan MirCha
Álvaro Felipe
Alexys Lozada, Álvaro Felipe, Jonathan MirCha
Beto Quiroga
Alexys Lozada
Alexys Lozada
José Luján
Álvaro Felipe
Álvaro Felipe
Jonathan MirCha
Jonathan MirCha
Alexys Lozada, José Luján
Alexys Lozada, José Luján
Alexys Lozada, José Luján
Camilo Adobe
Álvaro Felipe
José Luján
Jonathan MirCha
Álvaro Felipe
Álvaro Felipe
Beto Quiroga, Alexys Lozada
Álvaro Felipe
Juan Villalvazo
Luis Avilés
Jonathan MirCha
Jonathan MirCha
Jonathan MirCha

Estructuras anónimas en Go (Golang)

Gopher golang

Las estructuras anónimas nos sirven para cuando no queremos estar creando estructuras para devolver una respuesta con una estructura específica. Por ejemplo, imaginemos que quiero devolver en una API la estructura de Usuario:


 
type User struct {
    Name string `json:"name"`
    Age  int16  `json:"age"`
}

Entonces tu puedes hacer algo como:

func MyHandler(w http.ResponseWriter, r *http.Request) {
    u := User{Name: "Alexys", Age: 37}
    js, err := json.Marshal(u)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/json")
    w.Write(js)
}

Hasta aquí nada raro. Pero imagínate que quieres enviar el usuario y una información adicional, como por ejemplo el valor de un crédito pre-aprobado. Cómo lo harías?. Bueno lo primero que pensamos es en hacer una nueva estructura que contenga la información:

type PreApproved struct {
    User `json:"user"`
    Amount int `json:"amount"`
}

La estructura anterior está bien, pero es desgastante estar creando estructuras para cada respuesta `especial`. Así que llegan a nuestro rescate las estructuras anónimas. Las cuales creas `al vuelo` en la misma respuesta, así que podríamos hacer lo siguiente para no estar creando estructuras que solo utilizarás para respuestas específicas.

func MyHandler(w http.ResponseWriter, r *http.Request) {
    u := User{Name: "Alexys", Age: 37}
    amount := 1500
    js, err := json.Marshal(struct{
                              User `json:"user"`
                              Amount int `json:"amount"`
                            }{
                               u,
                               amount,
                            })
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    w.Header().Set("Content-Type", "application/json")
    w.Write(js)
}

Observen que dentro de la función `Marshal` del paquete `json` le enviamos una estructura anónima la cual es creada `al vuelo` y no tuvimos que crear una estructura solo para esta respuesta.

Espero que les haya gustado este pequeño artículo. Gracias por compartirlo y comentarlo. Saludos.

Suscríbete al blog de EDteam

Ingresa tu correo electrónico para recibir nuestro boletín semanal