Sobes.tech
Junior — Middle

Ako môžete určiť, či konkrétna trieda alebo objekt implementuje určitý rozhranie?

sobes.tech AI

Odpoveď od AI

V Go sú rozhrania implementované nepriame: ak typ implementuje všetky metódy rozhrania, automaticky sa považuje za implementujúci toto rozhranie.

Ak chcete skontrolovať, či konkrétny typ implementuje rozhranie, môžete použiť tvrdenie typu (type assertion) alebo sa pokúsiť priradiť hodnotu tohto typu do premennej typu rozhrania.

Príklad:

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

    // Kontrola implementácie rozhrania priradením
    r = mr // ak MyReader neimplementuje Reader, nastane chyba kompilácie

    // Kontrola cez tvrdenie typu
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader implementuje rozhranie Reader")
    } else {
        fmt.Println("MyReader neimplementuje rozhranie Reader")
    }
}