Sobes.tech
Junior — Middle

Чӣ гуна компилятор муайян мекунад, ки кадом усули мушаххас бояд даъват карда шавад, вақте ки боргирӣ ё ивазкунӣ вуҷуд дорад?

sobes.tech AI

Ҷавоб аз AI

Go тілінде әдістердің жүктелуі классикалық мағынада, мысалы C++ немесе Java сияқты, жоқ. Әр әдіс немесе функция пакеттің ішінде бірегей атауға ие. Егер бірдей атауда бірнеше функция болса, бірақ әртүрлі параметрлермен, бұл компиляция қатесін тудырады.

Қайта анықтау туралы айтқанда, Go интерфейстерді пайдаланады: егер бір тип интерфейстің әдістерін жүзеге асырса, интерфейс арқылы шақырғанда нақты типтің әдісі шақырылады.

Осылайша, әдіс таңдау компиляция кезінде функцияның атауы мен сигнатурасына негізделеді, ал динамикалық шақыру интерфейс арқылы орындалады, ол объектінің типіне байланысты.

Мысал:

package main
import "fmt"

type Speaker interface {
    Speak()
}

type Dog struct{}
func (d Dog) Speak() { fmt.Println("Woof") }

type Cat struct{}
func (c Cat) Speak() { fmt.Println("Meow") }

func main() {
    var s Speaker
    s = Dog{}
    s.Speak() // Woof шығарады
    s = Cat{}
    s.Speak() // Meow шығарады
}