Accede a todo EDteam con un único pago¡Sube a premium!

Estructuras anónimas en Go (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:

Diseño web
1 minuto
Hace 7 años
Estructuras anónimas en Go (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:


 
1type User struct { 2 Name string `json:"name"` 3 Age int16 `json:"age"` 4}

Entonces tu puedes hacer algo como:

1func MyHandler(w http.ResponseWriter, r *http.Request) { 2 u := User{Name: "Alexys", Age: 37} 3 js, err := json.Marshal(u) 4 if err != nil { 5 http.Error(w, err.Error(), http.StatusInternalServerError) 6 return 7 } 8 9 w.Header().Set("Content-Type", "application/json") 10 w.Write(js) 11}

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:

1type PreApproved struct { 2 User `json:"user"` 3 Amount int `json:"amount"` 4}

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.

1func MyHandler(w http.ResponseWriter, r *http.Request) { 2 u := User{Name: "Alexys", Age: 37} 3 amount := 1500 4 js, err := json.Marshal(struct{ 5 User `json:"user"` 6 Amount int `json:"amount"` 7 }{ 8 u, 9 amount, 10 }) 11 if err != nil { 12 http.Error(w, err.Error(), http.StatusInternalServerError) 13 return 14 } 15 16 w.Header().Set("Content-Type", "application/json") 17 w.Write(js) 18}

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.

Comentarios de los usuarios

Pregunta a ChatEDT