كيفية تهيئة شريحة فارغة بشكل صحيح في 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` وفي الأخرى مصفوفة فارغة؟ هذا محير، خاصة عندما أعمل