Avatar ·

ما هو null/nil في Go وكيفية التعامل معه؟

مرحبًا بالجميع! بدأت تعلم Go وواجهت مفهوم nil. في لغات أخرى (مثل Java أو JavaScript) يوجد null الذي غالبًا ما يسبب أخطاء (NullPointerException). في Go، كما فهمت، يُستخدم nil لكن السلوك مختلف.

إليك ما جربته:

package main

import "fmt"

func main() {
    var p *int
    fmt.Println(p) // يطبع nil
    // fmt.Println(*p) // panic: runtime error: invalid memory address or nil pointer dereference
    
    var s []int
    fmt.Println(s == nil) // true
    fmt.Println(len(s))   // 0
    // s[0] = 1 // panic
    
    var m map[string]int
    fmt.Println(m == nil) // true
    // m["key"] = 1 // panic
}

الأسئلة:

  1. لماذا لا يؤدي nil في Go إلى إنشاء هياكل فارغة تلقائيًا (على عكس null في بعض لغات البرمجة)؟
  2. كيفية التحقق بشكل صحيح من nil قبل استخدام المؤشرات، الـ