Junior — Middle
Kompilyator yükləmə və ya üst-üstə düşmə halında hansı konkret metodun çağırılacağını necə müəyyən edir?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində, C++ və ya Java kimi klassik mənada metodların yüklənməsi mövcud deyil. Hər metod və ya funksiya paket daxilində unikal adlandırılır. Əgər eyni adda, lakin fərqli parametrlərə malik bir neçə funksiya olsa, bu, tərtib zamanı xəta ilə nəticələnər.
Yenidən yazma ilə bağlı, Go interfeyslərdən istifadə edir: əgər bir tip interfeys metodlarını həyata keçirirsə, interfeys vasitəsilə çağırıldıqda, konkret tipin metodu çağrılır.
Beləliklə, metod seçimi tərtib zamanı funksiya adı və imzasına əsasən həyata keçirilir və dinamik çağırış interfeys vasitəsilə, obyektin tipi isə işləmə zamanı müəyyən edilir.
Nümunə:
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 çap edir
s = Cat{}
s.Speak() // Meow çap edir
}