Alan erişimi
- Go kursu
- Başlangıç
- Ders 71/90
- 4 dk
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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
for i := range kitaplar {
kitaplar____.Sayfa += 10
}
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 |