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