Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ μιας κενής διεπαφής και της τιμής nil στη γλώσσα Go;

sobes.tech AI

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

Στη γλώσσα προγραμματισμού Go, το κενό interface (interface{}) είναι ένας τύπος που μπορεί να περιέχει μια τιμή οποιουδήποτε τύπου, συμπεριλαμβανομένου του nil. Ωστόσο, η έκφραση του κενού interface και η τιμή nil είναι δύο διαφορετικά πράγματα.

  • var x interface{} — μια μεταβλητή x τύπου κενού interface, η οποία από προεπιλογή είναι ίση με nil, δηλαδή δεν περιέχει ούτε τύπο ούτε τιμή.
  • Αλλά αν της αναθέσετε μια τιμή, π.χ. x = 5, τότε το x δεν είναι πια nil, καθώς περιέχει τον τύπο int και την τιμή 5.

Η διαφορά είναι ότι το interface στο Go εκπροσωπείται εσωτερικά από δύο δείκτες: έναν προς τον τύπο και έναν προς την τιμή. Το interface είναι ίσο με nil μόνο αν και οι δύο δείκτες είναι nil.

Παράδειγμα:

var i interface{} // i == nil
var p *int = nil

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

fmt.Println(i == nil) // false

Επομένως, το κενό interface μπορεί να περιέχει μια τιμή nil συγκεκριμένου τύπου, αλλά το ίδιο το interface δεν θα είναι ίσο με nil. Αυτό είναι ένα σημαντικό σημείο κατά τον έλεγχο nil στο Go.