Junior — Middle
Kompilyator qanday qilib overload yoki override bo'lsa, qaysi aniq metodni chaqirishni aniqlaydi?
sobes.tech AI
AIdan javob
Go tilida, C++ yoki Java dagidek klassik ma'noda metodlarni ortiqcha yuklash mavjud emas. Har bir metod yoki funktsiya paket ichida yagona nomga ega. Agar bir nechta funksiyalar bir xil nomga ega bo'lsa, lekin turli parametrlar bilan, bu kompilyatsiya xatosiga olib keladi.
Qayta yozish haqida, Go interfeyslarni ishlatadi: agar tur interfeys metodlarini amalga oshirsa, interfeys orqali chaqirilganda, konkret turning metodi chaqiriladi.
Shunday qilib, metod tanlovi kompilyatsiya vaqtida funktsiya nomi va imzosi asosida amalga oshiriladi, va dinamik chaqiriq interfeys orqali, obyektning turi bajarilish vaqtida aniqlanadi.
Misol:
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 chiqaradi
s = Cat{}
s.Speak() // Meow chiqaradi
}