- 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