Kodkitabi

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())
    }
}