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
}