Sobes.tech
Junior — Middle

Kā noteikt, vai konkrēta klase vai objekts īsteno noteiktu interfeisu?

sobes.tech AI

Atbilde no AI

Go valodā saskarnes tiek realizētas netieši: ja tips realizē visas saskarnes metodes, tas automātiski tiek uzskatīts par šo saskarni realizējošu.

Lai pārbaudītu, vai konkrēts tips realizē saskarni, jūs varat izmantot tipu apgalvojumu (type assertion) vai mēģināt piešķirt šī tipa vērtību saskarnes tipa mainīgajam.

Piemērs:

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

    // Pārbaude – vai realizē saskarni, piešķirot
    r = mr // ja MyReader nerealizē Reader, būs kompilācijas kļūda

    // Pārbaude, izmantojot tipu apgalvojumu
    if _, ok := interface{}(mr).(Reader); ok {
        fmt.Println("MyReader realizē Reader saskarni")
    } else {
        fmt.Println("MyReader nerealizē Reader saskarni")
    }
}