struct
Struct Nedir?
Struct, nesne yönelimli programlama dillerinde bulunan class (sınıf) yapısına benzemektedir. Fakat class'lar gibi kalıtım işlemi gerçekleştiremez. Kalıtım yerine composition işlemini gerçekleştirebilir.
Composition: Kod tekrarını önlemek için büyük yapıların kendisinden daha küçük yapıların davranış ve özelliklerini kullanması olayıdır.
Struct Nasıl Kullanılır?
Product yapımızın bir örneğini oluşturalım.
Struct'larda Kurucu Metot Var Mı?
Yukarıda { } parantezlerimizin arasına struct içerisinde bulunan özelliklerimizin başlangıç değerlerini atayabiliriz. Bu OOP'de sınıflarda bulunan constructor yani kurucu metot olarak düşünülebilir.
(Birebir kurucu metot ile aynı işlevi görmemektedir. OOP'de kurucu metotlarda almak istediğimiz parametreleri biz belirtebiliyoruz veya birden fazla kurucu metot oluşturabiliyoruz. Sadece kullanım benzerliği bulunmaktadır.)
main fonksiyonumuzun içerisini aşağıdaki gibi güncellediğimizde Id özelliğimizin başlangıç değerini atamış oluruz.
Struct'larda Erişim Denetleyicileri Var Mı?
Id dışındaki değişkenlere atama yapmama nedenimiz OOP'de aşına olduğumuz access modifiers yapısında bulunan private & public özelliklerinin go'da oluşturduğumuz fonksiyon, struct veya struct içerisinde bulunan özelliklerin ilk harflerine göre otomatik gerçekleşiyor olmasıdır. Yani eğer bir paket içerisine oluşturduğumuz herhangi bir yapıya farklı bir paket içerisinden erişilmesini istiyorsak baş harfini büyük yapmamız yeterli olacaktır. Eğer erişim olmasını istemiyorsak baş harfi küçük olmalıdır. Yaptığımız örnekte Product yapımız içerisinde sadece Id özelliğimizin baş harfini büyük yaptığımız için main paketimiz içerisinden sadece Id erişim sağlayabiliyoruz.
Struct Composition İşlemi
Bir struct yapısı içerisinde farklı bir struct yapısı oluşturabiliriz veya var olan bir struct yapısını kullanabiliriz.
ProductDescription adında bir yapı oluşturduk ve içerisine iki adet özellik tanımladık. Daha sonra bu yapımızı Product yapımız içerisinde Description özelliğinin tipi olarak belirttik. Bu şekilde composition işlemi uygulamış olduk. Ayrıca Media adında bir özellik tanımladık direkt Product yapımız içerisinde farklı bir struct yapısı daha oluşturmuş olduk.
Struct'a Ait Fonksiyon Tanımlama
product.go dosyamız içerisine yukarıdaki fonksiyonu tanımlıyoruz. Bu fonksiyonu kısaca açıklama gerekirse func anahtar kelimemizden sonra yazılan (p Product) bölümü bu fonksiyonu sadece Product yapımızın örneklerinin kullanabileceğini yani fonksiyonun Product yapısına ait olduğunu belirtmektedir. Şimdi bu fonksiyonu çağıralım.
Struct Getter Setter İşlemleri
Yukarıda erişim denetleme işleminden bahsederken ilk harfi küçük olan özelliklerimize farklı paket içerisinden erişemeyeceğimizi söylemiştik. Fakat getter ve setter fonksiyonları oluşturarak farklı paketler içinde erişim veya güncelleme işlemleri yapabiliriz.
Yukarıdaki kodları product.go içerisine yazıyoruz. Bu şekilde name özelliğimize farklı paketler içinden erişebilir veya değerini değiştirebiliriz.
JSON to Struct
Öncelikle product.go dosyamızda bulunan struct yapılarımız içerisindeki tüm özelliklerin ilk harflerini büyük hale getiriyoruz. Bunun sebebi tüm verilerimizi json datamız üzerinden dolduracak olmamızdır.
Görüldüğü üzere her bir özelliğimizin yanında `json: "key"` ibaresi bulunmaktadır. Go'nun sunduğu bu yapı ile kolay bir şekilde json datamız içerisinde ki key'leri struct yapımızdaki özelliklerimiz ile eşleştirmiş oluyoruz. Şimdi json datamızı modelimize dönüştürelim.
json.Unmarshal yapısı go ile birlikte gelen "encoding/json" paketine aittir.
Sonuç
Struct kullanımı kolay ve OOP kavramlarından bazılarını kısmen uygulayabildiğimiz ama go'nun doğası gereği OOP uygulamaya gerek olmadan iç içe yapılar oluşturarak programlama kalitemizi arttıran go'nun bel kemiklerinden birisidir.
Last updated