Avatar ·

Cómo devolver JSON correctamente en Go: guía completa con ejemplos

¡Hola a todos! Acabo de empezar a aprender Go y me encontré con un problema: necesito escribir un servidor HTTP simple que en una solicitud GET a la ruta /api/user devuelva JSON con los datos del usuario. Leí que Go tiene el paquete integrado encoding/json, pero no puedo entender cómo serializar correctamente una estructura a JSON y enviarla en la respuesta.

Intenté hacerlo así:

package main

import (
    "fmt"
    "net/http"
)

type User struct {
    Name string
    Age  int
}

func userHandler(w http.ResponseWriter, r *http.Request) {
    user := User{Name: "Анна", Age: 28}
    fmt.Fprintf(w, "%v", user) 
}

func main() {
    http.HandleFunc("/api/user", userHandler)
    http.ListenAndServe(":8080", nil)
}

Pero en la respuesta obtengo algo como {Анна 28}, no {"Name":"Анна","Age":28}. ¿Cómo puedo marshaller correctamente la estructura a JSON y establecer el encabezado Content-Type adecuado? ¿Necesito manejar errores? ¿Y qué hacer si quiero que los campos se llamen en camelCase?