Junior — Middle
Kā kompilators nosaka, kuru konkrēto metodi izsaukt, ja ir pārslodze vai pārrakstīšana?
sobes.tech AI
Atbilde no AI
Go valodā nav metožu pārlādēšanas klasiskajā nozīmē, kā C++ vai Java. Katra metode vai funkcija ir unikāls nosaukums paketē. Ja ir vairākas funkcijas ar to pašu nosaukumu, bet dažādiem parametriem, tas izraisīs kompilācijas kļūdu.
Runājot par pārrakstīšanu, Go izmanto saskarnes: ja tips īsteno saskarnes metodes, tad, izsaucot caur saskarni, tiks izsaukta konkrētā tipa metode.
Tādējādi, metodes izvēle notiek kompilācijas laikā, pamatojoties uz funkcijas nosaukumu un parakstu, bet dinamiskais izsaukums caur saskarni tiek noteikts pēc objekta tipa izpildes laikā.
Piemērs:
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() // Izdrukās Woof
s = Cat{}
s.Speak() // Izdrukās Meow
}