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")
}
}