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

go playground’a git

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 Aractır ve biz bunu kodta hiç belirtmedik.