Golang Ducktyping
Ducktyping dinamik dillerde kullanılan bir terimdir. Amaç; herhangi bir objedeki var olan herhangi bir metodu invoke edebilmen için bir tipe ihtiyaç olmamasıdır. Metot objede tanımlanmışsa onu invoke edebilirsin. Bu
Eğer bir ördek(duck) ördek gibi görünüyorsa ve ördek gibi vak vaklıyorsa, ördektir.
ifadesinden gelmektedir.
Teknik olarak Golang’de bu işlem derleme zamanında olduğu için structural typing
olarak geçer.
Bu sayede bir interface’i deklaratif olarak implement etmek zorunda kalmazsınız.
//yanlış kullanım
type Otomobil implements Arac
Eğer Arac
diye bir interface var ise ve bu interface’in her metodu ayrı bir type da da mevcutsa, örneğin Motosiklet
type’ı, bu; zaten Motosiklet
type’ının da aynı zamanda bir Arac
olduğunu gösterir. Bunu yukardaki gibi deklaratif olarak belli etmemize gerek yok.
type Arac interface{
Hizlan()
}
type Motosiklet struct{}
func (m Motosiklet) Hizlan() {
fmt.Println("hizlandi")
}
func main() {
var motosiklet Motosiklet
araciHizlandir(motosiklet)
}
func araciHizlandir(arac Arac) {
arac.Hizlan()
}
// çıktı: hizlandi
Yukarıdaki örneğe bakacak olursak, araciHizlandir
fonksiyonu Arac
type’ından bir parametre bekliyordu fakat biz ona Motosiklet
type’ından bir parametre geçtik ve sorunsuz çalıştı. Bu demek oluyor ki; aslında Motosiklet
type’ı da bir Arac
tır ve biz bunu kodta hiç belirtmedik.