Junior — Middle
Hoe kun je bepalen of een bepaalde klasse of object een bepaalde interface implementeert?
sobes.tech AI
Antwoord van AI
In Go worden interfaces impliciet geïmplementeerd: als een type alle methoden van een interface implementeert, wordt het automatisch beschouwd als implementerend die interface.
Om te controleren of een specifiek type een interface implementeert, kun je een type assertion gebruiken of proberen een waarde van dat type toe te wijzen aan een variabele van het interface-type.
Voorbeeld:
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
// Controleer implementatie van interface via toewijzing
r = mr // als MyReader niet implementeert Reader, zal er een compile-fout zijn
// Controleer via type assertion
if _, ok := interface{}(mr).(Reader); ok {
fmt.Println("MyReader implementeert de interface Reader")
} else {
fmt.Println("MyReader implementeert de interface Reader niet")
}
}
Op deze manier garandeert de Go-compiler de conformiteit met de interface, en kan dit tijdens runtime worden gecontroleerd met een type assertion.