Struct ve pointer
- Go kursu
- Başlangıç
- Ders 73/90
- 4 dk
Struct pointer'ları ve nokta kullanımını öğrenirsin.
Struct ve pointer
Struct işaretçisiyle alanlara erişirken (*p).Ad yazmak gerekmez; Go bunu otomatik yapar: p.Ad.
k := &Kitap{Title: "Dune", Sayfa: 412}
k.Sayfa = 500 // (*k).Sayfa = 500 ile aynı
fmt.Println(k.Sayfa) // 500Struct'ı bir fonksiyonda değiştirmek ya da büyük bir struct'ı kopyalamadan geçirmek için işaretçi kullanılır.
Fonksiyonda değiştirmek
Struct değer olarak verilirse fonksiyon kopya üzerinde çalışır; değişikliğin kalması için işaretçi verilir:
func zamYap(c *Calisan, oran float64) {
c.Maas *= 1 + oran
}
c := Calisan{Ad: "Ada", Maas: 1000}
zamYap(&c, 0.1)
fmt.Println(c.Maas) // 1100Uygulama Zam yap
Calisan struct'ını (Ad string, Maas float64) ve zamYap(c *Calisan, oran float64) fonksiyonunu yaz. Maas: 1000 olan çalışana 0.1 oranında zam yapıp maaşı yazdır.
Başlangıç kodu
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
package main
import "fmt"
type Calisan struct {
Ad string
Maas float64
}
func zamYap(c *Calisan, oran float64) {
c.Maas *= 1 + oran
}
func main() {
c := Calisan{Ad: "Ada", Maas: 1000}
zamYap(&c, 0.1)
fmt.Println(c.Maas)
}Beklenen çıktı
1100
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Struct işaretçisiyle alana erişmenin doğru yazımı hangisidir?
- p.Ad Doğru cevap
- p->Ad
- *p.Ad
- p::Ad
Açıklama: Go nokta operatörüyle işaretçiyi otomatik çözer; -> ve :: Go'da yoktur, *p.Ad ise *(p.Ad) olarak okunur.
2 Struct işaretçisi
func zamYap(c ____Calisan, oran float64) {
c.Maas *= 1 + oran
}
func zamYap(c *Calisan, oran float64) {
c.Maas *= 1 + oran
}
Açıklama: Parametrenin *Calisan olması fonksiyonun asıl struct'ı değiştirmesini sağlar.
3 Kod ve etki
| Kavram | Anlamı |
|---|---|
p.Ad (p *Kitap) |
Otomatik çözme |
f(k) (değer) |
Kopya değişir |
f(&k) (işaretçi) |
Asıl değişir |
&Kitap{...} |
İşaretçi oluşturur |