Avatar ·

كيفية تهيئة شريحة فارغة بشكل صحيح في Go: var s []int مقابل s := make([]int, 0)?

مرحبًا بالجميع! بدأت مؤخرًا في تعلم Go وواجهت مشكلة تهيئة الشرائح الفارغة. يبدو أن هناك طريقتين شائعتين: 1. `var s []int` — إعلان بدون تهيئة (nil-slice) 2. `s := make([]int, 0)` — تهيئة بشريحة فارغة باستخدام make قرأت أنه يمكن استخدام كلا الخيارين، وفي بعض الحالات يتصرفان بنفس الطريقة. على سبيل المثال، إذا قمت بـ `fmt.Println(s)`، ففي كلتا الحالتين يظهر `[]`. لكن لاحظت سلوكًا غريبًا عند التسلسل إلى JSON. إليك مثال: ```go package main import ( "encoding/json" "fmt" ) type MyStruct struct { Items []string } func main() { s1 := MyStruct{} s2 := MyStruct{Items: []string{}} json1, _ := json.Marshal(s1) json2, _ := json.Marshal(s2) fmt.Println(string(json1)) // {"Items":null} fmt.Println(string(json2)) // {"Items":[]} } ``` لماذا في حالة واحدة يظهر `null` وفي الأخرى مصفوفة فارغة؟ هذا محير، خاصة عندما أعمل