Pythontr

husonet | Tarih: 05.11.2019

Go dili ve interface kullanımı

Go dilinde, interface bir veya daha fazla metod kümesi belirlemek için kullanılan özel bir türdür.

Go ile ilgilenmeye başladığımdan beri dilin object oriented (OOP) yapısı ile ilgili kendimi sorguluyorum, evet yaptığım incelemelerde class kullanımı yok fakat olayı daha fazla kullanımını esnettiklerini, anlamasını basitleştirdiklerini düşünüyorum. Çoğu programcı class yapılarına aşina değil tartışmalarda ABSTRACT, INTERFACE kelimeleri havada uçuşuyor ortam hararetleniyor ama bu durumu sadeleştirerek anlatan çok fazla kimseyide göremedim :) Bizler bir çok dilde özellikle Frameworkler ile çalışırken anlamadan her şeyi classlar içinde yapıyoruz çünkü Framework kullanmanın mantığında düzen, performans en önemliside işlerimizi kolaylaştırmak aynı şekilde yaptığımız işlerin kökünde nesne programlama da yazılım hayatını kolaylaştırıyor ve bu konuya hakim olduğumuz takdirde daha güzel mimariler çıkarıyoruz.


Bu konu uzun ben yazdıkça yazarım hep diyorum ezberim jargonum kötü ama detaylarına inmeyi seviyorum. Neyse konuyu uzatmadan konuya gireyim. Bugünkü konumuz go dilinde interface kullanımı.


Go dilinde struct type yapıları var Delphi programlama dilindeki yapılara oldukça çok benzetiyorum bunların amacı ise sadece datayı tutmak tek tipde birden fazla tipi barındırmak derdim ama 10 yıllar önce tabi Delphi dilinde :) Go dilinde ise durumu baya bir değiştirmişler pasta, cila da çekmişler diyebiliriz :) en güzel özelliği bu struct yapılara metod bağlayabiliyoruz ve birden fazla struct type verisini interface tipleri üzerinden ayırt ederek çağırabiliyoruz yada yönetebiliyoruz. Çok güzel ve olayı dallandırmıyor :) yok abstract yok interface :)


Yaptığım örneğin amacı sadece interface kullanımını ve structlar üzerinden metod kullanmayı örneklemeye çalışıyor.


package main

import (
"fmt"
"math"
)

type square struct {
length float64
}

type circle struct {
radius float64
}

type calculate interface {
calc() float64
}

func geometry(c calculate) {
fmt.Println(c.calc())
}

func (s square) calc() float64 {
return s.length * s.length
}

func (c circle) calc() float64 {
return math.Pi * c.radius * c.radius
}

func main() {
s := square{length: 14}
c := circle{radius: 14}
geometry(s)
geometry(c)
}

https://play.golang.org/p/BZgcNA3pIBN