Interface (101): Arayüzler ile Esnek Kod Yazımı

  • Konbuyu başlatan Konbuyu başlatan irfo
  • Başlangıç tarihi Başlangıç tarihi

irfo

Moderatör
Top Poster Of Month
Katılım
7 Ocak 2026
Mesajlar
290
Tepkime puanı
2
Puanları
18

Ne Olduğu Değil, Ne Yaptığı Önemli​

Diğer dillerde (Java/C#) bir sınıfın bir arayüzü (interface) uygulaması için implements anahtar kelimesi gerekir. Go'da bu yoktur. Go'da bir tip, arayüzdeki metotlara sahipse, o arayüzü otomatik olarak uygulamış sayılır. Buna "Duck Typing" denir: "Ördek gibi yürüyorsa ve ördek gibi vaklıyorsa, o bir ördektir."

Interface, bir nesnenin ne olduğunu değil, ne yapabildiğini tanımlar.

Interface Tanımlama ve Kullanma​

Diyelim ki farklı şekillerin alanını hesaplamak istiyoruz.

Kod:
package main

import ("fmt""math")

// 1. Interface Tanımı: "Alan" metoduna sahip olan HER ŞEY bir "Sekil"dir.type Sekil interface {Alan() float64}

// 2. Struct Tanımlarıtype Kare struct {Kenar float64}

type Daire struct {Yaricap float64}

// 3. Metotların Yazılması (Interface'i otomatik implemente eder)func (k Kare) Alan() float64 {return k.Kenar * k.Kenar}

func (d Daire) Alan() float64 {return math.Pi * d.Yaricap * d.Yaricap}

// 4. Interface Kullanan Fonksiyon// Bu fonksiyon ne Kare bilir ne Daire. Sadece "Sekil" bilir.func BilgiYazdir(s Sekil) {fmt.Printf("Bu şeklin alanı: %.2f\n", s.Alan())}

func main() {k := Kare{Kenar: 5}d := Daire{Yaricap: 3}

// Her iki struct da "Sekil" interface'ine uyduğu için parametre olarak gönderilebilir.<br>BilgiYazdir(k)<br>BilgiYazdir(d)<br>
}

Boş Interface:​

Hiçbir metodu olmayan interface{}, her türlü veriyi tutabilir. Çünkü her tipin "sıfır" tane metodu vardır. fmt.Println fonksiyonu her şeyi yazdırabilmek için bunu kullanır.

Kod:
var hersey interface{}hersey = 5hersey = "Merhaba"hersey = true
(Not: Go 1.18 ile birlikte any anahtar kelimesi interface{} yerine kullanılabilir hale gelmiştir).

Sonuç​

Interface'ler Go'nun en güçlü yanlarından biridir. Kodunuzun bağımlılıklarını azaltır (decoupling) ve test edilebilirliğini artırır. Gelecekteki "Mocking" ve "Unit Test" konularında sıkça karşımıza çıkacak.
 
Geri
Üst