json.Unmarshal vs json.NewDecoder.Decode: ¿cuál es la diferencia en Go?
¡Hola a todos! Soy nuevo en Go y estoy tratando de entender el parsing de JSON. Veo que en la biblioteca estándar hay dos formas: `json.Unmarshal` y `json.NewDecoder().Decode()`. Ambas parecen hacer lo mismo: convertir JSON en una estructura de datos de Go. Pero no entiendo cuándo usar cada una.
Por ejemplo, tengo este código:
```go
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
// Forma 1
data := `{"name":"Alice","age":30}`
var user1 User
err := json.Unmarshal([]byte(data), &user1)
// Forma 2
reader := strings.NewReader(data)
var user2 User
err = json.NewDecoder(reader).Decode(&user2)
```
Ambas variantes funcionan igual. Pero he oído que `Decoder` es mejor para streams, y `Unmarshal` para datos pequeños. ¿Cuál es la diferencia real? ¿Hay diferencia en rendimiento? ¿Cuándo debería elegir un método sobre el otro? ¿Y qué pasa si el JSON es muy grande (por ejemplo, 100 MB)? Ayúdenme a entender, porque en la documentación está escrito de manera confusa.