Middle
Γιατί η κενή διεπαφή στο Go μπορεί να μετατραπεί σε οποιοδήποτε τύπο;
sobes.tech AI
Απάντηση από AI
Το κενό διασύνδεση interface{} δεν περιέχει μεθόδους. Οποιοσδήποτε τύπος στο Go μπορεί να ικανοποιήσει μια διασύνδεση που δεν απαιτεί μεθόδους. Επομένως, η τιμή οποιουδήποτε τύπου μπορεί να ανατεθεί σε μια μεταβλητή τύπου interface{} ή να περαστεί σε μια λειτουργία που δέχεται interface{}. Στην ουσία, το interface{} είναι ένας κοντέινερ για μια τιμή οποιουδήποτε τύπου, που αποθηκεύει τόσο την τιμή όσο και τον τύπο της.
package main
import "fmt"
func main() {
var i interface{} // Δηλώνουμε μια μεταβλητή κενής διασύνδεσης
i = 42 // Ανάθεση ενός int
fmt.Printf("Αξία: %v, Τύπος: %T\n", i, i)
i = "γεια" // Ανάθεση ενός string
fmt.Printf("Αξία: %v, Τύπος: %T\n", i, i)
i = true // Ανάθεση ενός bool
fmt.Printf("Αξία: %v, Τύπος: %T\n", i, i)
i = struct{}{} // Ανάθεση μιας κενής δομής
fmt.Printf("Αξία: %v, Τύπος: %T\n", i, i)
}
Η μετατροπή από interface{} σε συγκεκριμένο τύπο είναι δυνατή μέσω δήλωσης τύπου (type assertion) ή μέσω switch τύπου (type switch).
package main
import "fmt"
func main() {
var i interface{} = "κόσμος"
// Δήλωση τύπου
s, ok := i.(string) // ελέγχει αν η τιμή είναι string
if ok {
fmt.Println("Επιτυχής δήλωση τύπου:", s)
} else {
fmt.Println("Αποτυχία δήλωσης τύπου")
}
// Switch τύπου
switch v := i.(type) {
case int:
fmt.Println("Ο τύπος είναι int, τιμή:", v)
case string:
fmt.Println("Ο τύπος είναι string, τιμή:", v)
default:
fmt.Println("Άγνωστος τύπος")
}
}