Avatar ·

json.Unmarshal vs json.NewDecoder.Decode: qual a diferença em Go?

Olá a todos! Sou novo em Go e estou tentando entender o parsing de JSON. Vejo que na biblioteca padrão existem duas maneiras: `json.Unmarshal` e `json.NewDecoder().Decode()`. Ambos parecem fazer a mesma coisa — transformar JSON em uma estrutura de dados Go. Mas não entendo quando usar cada um. Por exemplo, tenho este código: ```go type User struct { Name string `json:"name"` Age int `json:"age"` } // Método 1 data := `{"name":"Alice","age":30}` var user1 User err := json.Unmarshal([]byte(data), &user1) // Método 2 reader := strings.NewReader(data) var user2 User err = json.NewDecoder(reader).Decode(&user2) ``` Ambos funcionam da mesma forma. Mas ouvi dizer que `Decoder` é melhor para streams, e `Unmarshal` para dados pequenos. Qual é a diferença real? Há diferença de performance? Quando devo escolher um método em vez do outro? E o que acontece se o JSON for muito grande (por exemplo, 100 MB)? Ajude-me a entender, porque a documentação não é clara.