GOLANGGO

Estructuras anónimas en Go (Golang)

30 jun. 2017|Lectura de 1 minuto

Vue.js desde cero

Curso: Vue.js desde cero

Vue es un framework progresivo de JavaScript que te da la flexibilidad necesaria para todo tipo de proyectos.

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.