CodeBlanks Logo Icon CodeBlanks

Alan erişimi

Nokta operatörüyle struct alanlarına erişmeyi öğrenirsin.

Alan erişimi

Alanlar nokta ile okunur ve yazılır. Struct bir dilimdeyse elemanın alanı dizinle değiştirilir:

kitaplar := []Kitap{{"Dune", "Herbert", 412}, {"Vakıf", "Asimov", 255}}
kitaplar[1].Sayfa = 300
for _, k := range kitaplar {
    fmt.Println(k.Title, k.Sayfa)
}

for _, k := range döngüsündeki k bir kopyadır; k.Sayfa = ... dilimi değiştirmez.

Struct etiketleri

Alanların ardından ters tırnak içinde etiket yazılabilir; kütüphaneler bu etiketleri okur. En yaygını JSON alan adlarıdır:

type Kitap struct {
    Title string `json:"title"`
    Sayfa  int    `json:"sayfa,omitempty"`
}

Etiketler Go kodunun davranışını değiştirmez; yalnızca reflection ile okuyan paketler (encoding/json, veritabanı kütüphaneleri) kullanır.

Uygulama Toplu güncelleme

Kitap struct'ını (Title string, Sayfa int) tanımla. İki kitaplık bir dilimdeki her kitabın sayfasını dizinle 10 artır ve toplam sayfa sayısını yazdır (başlangıç: 412 ve 255).

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Kitap struct {
    Title string
    Sayfa  int
}

func main() {
    kitaplar := []Kitap{{"Dune", 412}, {"Vakıf", 255}}
    for i := range kitaplar {
        kitaplar[i].Sayfa += 10
    }
    toplam := 0
    for _, k := range kitaplar {
        toplam += k.Sayfa
    }
    fmt.Println(toplam)
}

Beklenen çıktı

687

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Tüm kitapların sayfa sayısını 10 artırmak için hangisi doğrudur?

  • kitaplar.Sayfa += 10
  • Mümkün değildir
  • for i := range kitaplar { kitaplar[i].Sayfa += 10 } Doğru cevap
  • for _, k := range kitaplar { k.Sayfa += 10 }

Açıklama: Değişiklik dizin üzerinden yapılmalıdır; range'in verdiği değer elemanın kopyasıdır.

2 Dizinle değiştir

Soru
for i := range kitaplar {
    kitaplar____.Sayfa += 10
}
Cevap
for i := range kitaplar {
    kitaplar[i].Sayfa += 10
}

Açıklama: kitaplar[i] dilimdeki asıl elemana erişir.

3 İfade ve etki

Kavram Anlamı
k.Title Alanı okur
kitaplar[1].Sayfa = 300 Dilimdeki elemanı değiştirir
for _, k := range Kopya verir
`json:"title"` Etiket

Başlangıç bölümündeki tüm dersler