Sobes.tech
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")
    }
}