Yapı struct
nesne benzeri gruplama için kullanılır. Bir çok alanda kullanılırlar örn database işlemlerinde, json/xml çıktılarında vb.
package main
import "fmt"
// Yapı
type Ogrenci struct {
ad string
soyad string
yas int
sinif string
}
// İç içe Yapılar
type Laptop struct {
islemci string
ekranKarti string
disk string
ram int
}
type Uretici struct {
firma string
model string
Laptop // yapı
}
func main() {
// Boş yapı oluşturma
ogr := new(Ogrenci)
fmt.Println(ogr)
// Yapıya Değer Atama
fmt.Println(Ogrenci{"Aydın", "Yakar", 40, "3A"})
// Yapıya alan adları ile birlikte değer atama
fmt.Println(Ogrenci{ad: "Hasan", soyad: "Ünsal", yas: 45, sinif: "5C"})
// Boş alanlar ile değer atama
fmt.Println(Ogrenci{ad: "Osman"})
// Yapıdaki değeri yazdırma
o := Ogrenci{ad: "Hüseyin", yas: 20}
fmt.Println(o.ad)
// Yapıyı işaretçi ile kullanmak
ogrenci := &o
fmt.Println(ogrenci.ad)
// İşaret edilen yapıda değişiklik yapılabilir
ogrenci.yas = 22
fmt.Println(ogrenci.yas)
// İşaretçi ile belirtilen değişkenlerin değerleri işaret edilen değişkenin adresidir
fmt.Println("o değişkeni:", &o, "\nogrenci degişkeni:", &ogrenci)
// Gömülü yapılar
laptop := Laptop{islemci: "i7 8750h", ekranKarti: "GTX 1060", disk: "250 gb m2 SSD", ram: 16}
uretici := Uretici{firma: "Monster Notebook", model: "Tulpar T5 v17.1", Laptop: laptop}
fmt.Println(laptop, uretici)
}
&{ 0 }
{Aydın Yakar 40 3A}
{Hasan Ünsal 45 5C}
{Osman 0 }
Hüseyin
Hüseyin
22
o değişkeni: &{Hüseyin 22 }
ogrenci degişkeni: 0xc00000e030
{i7 8750h GTX 1060 250 gb m2 SSD 16} {Monster Notebook Tulpar T5 v17.1 {i7 8750h GTX 1060 250 gb m2 SSD 16}}
Yapı Tanımlama
type Ogrenci struct {
ad string
soyad string
yas int
sinif string
}
Yapı tanımları struct
anahtar kelimesi ile yapılır. Ardından alanların türleri girilmelidir.
İç içe Yapılar
type Laptop struct {
islemci string
ekranKarti string
disk string
ram int
}
type Uretici struct {
firma string
model string
Laptop // yapı
}
Eğer iç içe yapılar olacak ise eklenen yapı için tür belirtecine gerek yoktur. Eğer dizi olarak atanacak ise laptop []Laptop
şeklinde de belirtilebilir.
laptop := Laptop{islemci: "i7 8750h", ekranKarti: "GTX 1060", disk: "250 gb m2 SSD", ram: 16}
uretici := Uretici{firma: "Monster Notebook", model: "Tulpar T5 v17.1", Laptop: laptop}
fmt.Println(laptop, uretici)
Boş Yapı Oluşturma
ogr := new(Ogrenci)
Boş bir yapı oluşturmak için new()
fonksiyonu kullanılır. Tüm değerler boş/sıfır (zero-valued
) olacaktır.
Yapıya Değer Atama Yöntemleri
// Yapıya Değer Atama
fmt.Println(Ogrenci{"Aydın", "Yakar", 40, "3A"})
// Yapıya alan adları ile birlikte değer atama
fmt.Println(Ogrenci{ad: "Hasan", soyad: "Ünsal", yas: 45, sinif: "5C"})
// Boş alanlar ile değer atama
fmt.Println(Ogrenci{ad: "Osman"})
Yukarıda 3 farklı değer atama yöntemi görülmektedir. İlkinde sırasıyla değerler belirtilmiştir, ikinci yöntemde ise alan adları belirtilmiştir fakat istenirse sırası değiştirilerek de belirtilebilir. Son yöntem ise sadece ad
atanmış, diğer alanlar boş bırakılmıştır.
Yapıdaki Değeri Yazdırma
o := Ogrenci{ad: "Hüseyin", yas: 20}
fmt.Println(o.ad)
Değişken.alan şeklinde erişim sağlanabilmektedir.
Yapıyı İşaretçi ile Kullanmak
ogrenci := &o
fmt.Println(ogrenci.ad)
// İşaret edilen yapıda değişiklik yapılabilir
ogrenci.yas = 22
fmt.Println(ogrenci.yas)
Değişkeni işaretçi pointer
ile farklı bir değişkene atayabilirsiniz. Fakat unutulmaması gereken aslında ogrenci
değişkeninin sadece bir işaretçi olduğu yani o
değişkeninin adresini barındırdığıdır. Yine de işaret edilen yapıda yapılan değişiklikler diğer değişkeni de değiştirmektedir. Karışık mı oldu? Örneğin aşağıdaki kısmını incelediğiniz de daha net oturacaktır.
fmt.Println("o değişkeni:", &o, "\nogrenci degişkeni:", &ogrenci)
Top comments (0)