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 ميجابايت)؟ ساعدوني في الفهم، لأن التوثيق مكتوب بطريقة غير واضحة.