Sobes.tech
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 εγγυάται τη συμμόρφωση με τη διεπαφή, και κατά την εκτέλεση μπορεί να ελεγχθεί μέσω δήλωσης τύπου.