Back to questions
Andersen
Senior
4
What is the difference between json.Unmarshal and json.Decoder, and when would you use each?
Companies where asked
Answer from AI
sobes.tech AI
json.Unmarshal и json.Decoder — это два способа декодирования JSON в Go, но они имеют разные сценарии использования:
-
json.Unmarshalпринимает весь JSON как срез байт ([]byte) и сразу пытается распарсить его в заданную структуру. Это удобно, когда у вас есть весь JSON целиком в памяти. -
json.Decoderработает с потоком (например,io.Reader), позволяя читать и декодировать JSON по частям. Это полезно для больших данных или когда JSON приходит по сети или из файла постепенно.
Когда использовать:
- Если JSON небольшой и доступен целиком —
json.Unmarshalпроще и быстрее. - Если JSON большой, или вы хотите читать несколько JSON-объектов из одного потока, или обрабатывать данные по мере поступления — используйте
json.Decoder.
Пример с json.Decoder для чтения нескольких JSON-объектов из потока:
decoder := json.NewDecoder(reader)
for {
var obj MyStruct
if err := decoder.Decode(&obj); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
// обработка obj
}