Sobes.tech
Junior — Middle

Πότε σε προγραμματισμό μια διεπαφή μπορεί να έχει την τιμή nil ή να είναι απροσδιόριστη;

sobes.tech AI

Απάντηση από AI

Στη Go, μια διεπαφή μπορεί να έχει την τιμή nil ή να είναι απροσδιόριστη στις ακόλουθες περιπτώσεις:

  1. Μη αρχικοποιημένη μεταβλητή διεπαφής Αν η μεταβλητή διεπαφής δηλωθεί αλλά δεν της αποδοθεί τιμή, είναι ίση με nil.

  2. Η διεπαφή περιέχει έναν μηδενικό δείκτη Στη Go, μια διεπαφή αποτελείται από δύο μέρη: τύπο και τιμή. Αν ο τύπος έχει οριστεί, αλλά η τιμή είναι ένας μηδενικός δείκτης (nil), η διεπαφή δεν είναι ίση με nil, παρόλο που η εσωτερική τιμή απουσιάζει.

  3. Μεταβίβαση nil στη διεπαφή Αν μεταβιβάσετε στη διεπαφή μια τιμή nil ενός συγκεκριμένου τύπου (π.χ., (*MyStruct)(nil)), η διεπαφή δεν θα είναι ίση με nil, επειδή ο τύπος υπάρχει.

Παράδειγμα:

var i interface{} // i == nil

var p *int = nil
i = p // i != nil, επειδή ο τύπος *int υπάρχει, αλλά η τιμή είναι `nil`

if i == nil {
    fmt.Println("i είναι `nil`")
} else {
    fmt.Println("i δεν είναι `nil`")
}

Είναι σημαντικό να λαμβάνεται υπόψη αυτό κατά τον έλεγχο για nil για να αποφεύγονται ψευδείς θετικοί έλεγχοι.