Junior — Middle
Come si può determinare se una classe o un oggetto specifico implementa un'interfaccia particolare?
sobes.tech AI
Risposta dell'AI
In Go, le interfacce vengono implementate in modo implicito: se un tipo implementa tutti i metodi di un'interfaccia, viene automaticamente considerato come implementante quell'interfaccia.
Per verificare se un tipo specifico implementa un'interfaccia, si può usare un'asserzione di tipo o tentare di assegnare un valore di quel tipo a una variabile di tipo interfaccia.
Esempio:
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
// Verifica dell'implementazione dell'interfaccia tramite assegnazione
r = mr // se MyReader non implementa Reader, ci sarà un errore di compilazione
// Verifica tramite asserzione di tipo
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implementa l'interfaccia Reader")
} else {
fmt.Println("MyReader non implementa l'interfaccia Reader")
}
}
In questo modo, il compilatore Go garantisce la conformità all'interfaccia, e a runtime si può verificare tramite un'asserzione di tipo.