Junior — Middle
Kako odrediti da li određena klasa ili objekat implementira određeni interfejs?
sobes.tech АИ
Одговор од АИ
У у Го, интерфејси се имплементирају нејавно: ако тип имплементира све методе интерфејса, он се аутоматски сматра да имплементира тај интерфејс.
Да бисте проверили да ли одређени тип имплементира интерфејс, можете користити изјаву о типу (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")
}
}