CodeBlanks Logo Icon CodeBlanks

Struct ve pointer

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)    // 500

Struct'ı 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)  // 1100

Uygulama 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

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
func zamYap(c ____Calisan, oran float64) {
    c.Maas *= 1 + oran
}
Cevap
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

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