Junior — Middle
Πώς μπορούμε να προσδιορίσουμε αν μια συγκεκριμένη κλάση ή αντικείμενο υλοποιεί μια συγκεκριμένη διεπαφή;
sobes.tech AI
Απάντηση από AI
Στο Go, οι διεπαφές υλοποιούνται έμμεσα: αν ένας τύπος υλοποιεί όλες τις μεθόδους μιας διεπαφής, θεωρείται αυτόματα ότι υλοποιεί αυτήν τη διεπαφή.
Για να ελέγξετε αν ένας συγκεκριμένος τύπος υλοποιεί μια διεπαφή, μπορείτε να χρησιμοποιήσετε μια δήλωση τύπου (type assertion) ή να προσπαθήσετε να αναθέσετε μια τιμή αυτού του τύπου σε μια μεταβλητή τύπου διεπαφής.
Παράδειγμα:
package main
import "fmt"
type Reader interface {
Read(p []byte) (n int, err error)
}
type MyReader struct {}
func (r MyReader) Read(p []byte) (n int, err error) {
return 0, nil
}
func main() {
var r Reader
var mr MyReader
// Έλεγχος υλοποίησης διεπαφής μέσω ανάθεσης
r = mr // αν ο MyReader δεν υλοποιεί το Reader, θα υπάρξει σφάλμα μεταγλώττισης
// Έλεγχος μέσω δήλωσης τύπου
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("Ο MyReader υλοποιεί τη διεπαφή Reader")
} else {
fmt.Println("Ο MyReader δεν υλοποιεί τη διεπαφή Reader")
}
}
Έτσι, ο μεταγλωττιστής Go εγγυάται τη συμμόρφωση με τη διεπαφή, και κατά την εκτέλεση μπορεί να ελεγχθεί μέσω δήλωσης τύπου.