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.