Metotlar ve Arayüzler (Interfaces)
Struct'lara davranış kazandırma ve Interface'ler ile polimorfizm.
Go'da bir fonksiyonun belli bir Struct'a ait olduğunu belirtmek için fonksiyon adından önce Receiver (Alıcı) tanımlanır. Bu, C# dilindeki sınıf içi metotlara benzer.
Interface'ler ise metot imzalarını (sözleşmeleri) tanımlar. Bir Struct, interface içindeki metotları uyguluyorsa, açıkça "implements" yazmasına gerek kalmadan otomatik olarak o interface'i sağlamış sayılır (Implicit Implementation).
Receiver Metotlar ve Interface
package main
import "fmt"
// Arayüz Tanımlama
type Speaker interface {
Speak() string
}
// Struct Tanımlamaları
type Dog struct { Name string }
type Cat struct { Name string }
// Dog için Struct Metodu (Receiver)
func (d Dog) Speak() string {
return d.Name + " havlıyor: Hav Hav!"
}
// Cat için Struct Metodu
func (c Cat) Speak() string {
return c.Name + " miyavlıyor: Miyav!"
}
func main() {
d := Dog{Name: "Karabaş"}
c := Cat{Name: "Tekir"}
// Interface tipinde bir Slice
animals := []Speaker{d, c}
for _, animal := range animals {
fmt.Println(animal.Speak())
}
}