Özet - Struct
- Go kursu
- Başlangıç
- Ders 74/90
- 4 dk
Struct, embedding ve pointer'ı birleştirerek bir kişi kaydı yazarsın.
Struct özeti
Struct'lar Go'nun veri modelidir: type Ad struct { ... } ile tanımlanır, adlı alanlarla oluşturulur, atamada kopyalanır, karşılaştırılabilir alanlarla == destekler. İşaretçiyle (&T{}, p.Alan) paylaşılır ve değiştirilir. Embedding ile başka struct'ların alanları yükseltilir; etiketler kütüphanelere bilgi verir.
Struct dilimi üzerinde işlem
Gerçek programlarda struct'lar çoğunlukla dilimlerde tutulur ve filtrelenir:
var uzun []Kitap
for _, k := range kitaplar {
if k.Sayfa > 300 {
uzun = append(uzun, k)
}
}slices.SortFunc(kitaplar, func(a, b Kitap) int { return a.Sayfa - b.Sayfa }) ise struct dilimini bir alana göre sıralar.
Uygulama Sıralı kitaplar
Kitap (Title string, Sayfa int) dilimini {"Dune", 412}, {"Simyacı", 184}, {"Vakıf", 255} ile oluştur. slices.SortFunc ile sayfaya göre artan sırala ve başlıkları sırayla tek satırda yazdır.
Başlangıç kodu
package main
import (
"fmt"
"slices"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"fmt"
"slices"
)
type Kitap struct {
Title string
Sayfa int
}
func main() {
kitaplar := []Kitap{{"Dune", 412}, {"Simyacı", 184}, {"Vakıf", 255}}
slices.SortFunc(kitaplar, func(a, b Kitap) int { return a.Sayfa - b.Sayfa })
for _, k := range kitaplar {
fmt.Print(k.Title, " ")
}
fmt.Println()
}Beklenen çıktı
Simyacı Vakıf Dune
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir struct'ı <code>fmt.Printf("%+v", k)</code> ile yazdırınca ne görülür?
- Yalnızca değerler
- Bellek adresi
- JSON
- Alan adlarıyla değerler: {Title:Dune Sayfa:412} Doğru cevap
Açıklama: %v yalnızca değerleri, %+v alan adlarını da, %#v Go sözdizimini gösterir.
2 Alanlarla yazdır
fmt.Printf("____
", Kitap{"Dune", 412}) // {Title:Dune Sayfa:412}
fmt.Printf("%+v
", Kitap{"Dune", 412}) // {Title:Dune Sayfa:412}
Açıklama: %+v struct'ı alan adlarıyla birlikte yazdırır.
3 Grubun özeti
| Kavram | Anlamı |
|---|---|
type T struct |
Tanım |
T{Alan: x} |
Adlı oluşturma |
Embedding |
Kompozisyon |
p.Alan |
Otomatik çözme |