Sobes.tech
Junior — Middle

Qanday qilib kompilatorga ma'lum bir sinf ma'lum bir interfeysni amalga oshirayotganligini ko'rsatish mumkin?

sobes.tech AI

AIdan javob

Go tilida interfeysning amalga oshirilishi noaniq tarzda amalga oshiriladi: agar tur interfeysning barcha metodlarini amalga oshirsa, u avtomatik ravishda bu interfeysni amalga oshiradi hisoblanadi. Bu aniq ko'rsatishni talab qilmaydi.

Misol:

package main

import "fmt"

type Speaker interface {
    Speak() string
}

type Dog struct {}

func (d Dog) Speak() string {
    return "Gav!"
}

func main() {
    var s Speaker
    d := Dog{}
    s = d // Dog, Speaker interfeysini amalga oshiradi
    fmt.Println(s.Speak())
}

Agar turni aniq tekshirmoqchi bo'lsangiz, _kompilyatsiya tekshiruvi_ni ishlatishingiz mumkin:

var _ Speaker = (*Dog)(nil) // Kompilyator, *Dog, Speakerni amalga oshiradimi, tekshiradi

Shu tarzda, Go da interfeyslar, zarur metodlar mavjud bo'lsa, avtomatik ravishda amalga oshiriladi.