Avatar ·

json.Unmarshal 对比 json.NewDecoder.Decode:在 Go 中有什么区别?

大家好!我是 Go 的新手,正在尝试理解 JSON 解析。我看到标准库中有两种方式:`json.Unmarshal` 和 `json.NewDecoder().Decode()`。两者似乎做同样的事情——将 JSON 转换为 Go 数据结构。但我不明白什么时候该用哪一个。 例如,我有这样的代码: ```go type User struct { Name string `json:"name"` Age int `json:"age"` } // 方式 1 data := `{"name":"Alice","age":30}` var user1 User err := json.Unmarshal([]byte(data), &user1) // 方式 2 reader := strings.NewReader(data) var user2 User err = json.NewDecoder(reader).Decode(&user2) ``` 两种方式都能正常工作。但我听说 `Decoder` 更适合流式处理,而 `Unmarshal` 适合小数据。真正的区别是什么?性能上有区别吗?什么时候应该选择一种方法而不是另一种?如果 JSON 非常大(例如 100 MB)会怎样?请帮我理解,因为文档写得不清楚。