Sobes.tech
Junior — Middle

Kaip galima nustatyti, ar tam tikras klasė ar objektas įgyvendina tam tikrą sąsają?

sobes.tech AI

Atsakymas iš AI

Go kalboje są sąsajos įgyvendinami netiesiogiai: jei tipas įgyvendina visas sąsajos metodus, jis automatiškai laikomas įgyvendinančiu tą sąsają.

Norėdami patikrinti, ar konkretus tipas įgyvendina sąsają, galite naudoti tipo teiginį (type assertion) arba bandyti priskirti šio tipo reikšmę sąsajos tipui kintamajam.

Pavyzdys:

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

    // Patikrinimas – ar įgyvendinama sąsaja priskyrimu
    r = mr // jei MyReader neįgyvendina Reader, bus klaida kompiliuojant

    // Patikrinimas – naudojant tipo teiginį
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader įgyvendina Reader sąsają")
    } else {
        fmt.Println("MyReader neįgyvendina Reader sąsajos")
    }
}