Struct Başlatma
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 9 / 107.
Go, her biri farklı durumlarda kullanışlı olan, struct'ları başlatmak için birkaç yöntem sunar.
Adlandırılmış alan başlatma
type Person struct {
Name string
Age int
City string
}
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Konumsal ilklendirme (sıra, alan bildirimiyle eşleşmelidir)
p2 := Person{"Bob", 30, "London"}Sıfır-değerli ilklendirme (tüm alanlar varsayılan değerleri alır)
p3 := Person{}
// Name: "", Age: 0, City: ""
Kısmi başlatma (ayarlanmamış alanlar sıfır değerlerini alır)
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""
& kullanarak bir struct işaretçisi (pointer)
p5 := &Person{
Name: "Diana",
Age: 28,
City: "Paris",
}
fmt.Println(p5.Name) // Dianavar kullanıp ardından alanlara değer atama
var p6 Person
p6.Name = "Eve"
p6.Age = 22Adlandırılmış alan başlatma, en yaygın ve okunabilir yaklaşımdır. Yapıya (struct) bir işaretçi (pointer) ihtiyacınız olduğunda & kullanın.
Görev
OrtaFarklı başlatma yöntemlerini kullanarak üç Player nesnesi oluşturun:
- player1: Girdi değerlerini kullanarak adlandırılmış alan başlatma
- player2: Name: "Guest", Class: "Novice", HitPoints: 50 ile adlandırılmış alan başlatma
- player3:
varbildirimini kullanın, ardından her alanı ayrı ayrı atayın
Kopya kağıdı
Go, struct'ları başlatmak için birkaç yol sunar:
Adlandırılmış alan başlatma (en yaygın ve okunabilir olanı):
p1 := Person{
Name: "Alice",
Age: 25,
City: "New York",
}Konumsal başlatma (sıralama, alan bildirimiyle eşleşmelidir):
p2 := Person{"Bob", 30, "London"}Sıfır-değer başlatma (tüm alanlar varsayılan değerleri alır):
p3 := Person{}
// Name: "", Age: 0, City: ""Kısmi başlatma (ayarlanmamış alanlar sıfır değerlerini alır):
p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""& kullanarak bir struct'a işaretçi (pointer):
p5 := &Person{
Name: "Diana",
Age: 28,
}
fmt.Println(p5.Name) // Dianavar kullanarak ve ardından alanları atayarak:
var p6 Person
p6.Name = "Eve"
p6.Age = 22Kendin dene
package main
import "fmt"
func main() {
var name, class string
var hp int
fmt.Scan(&name, &class, &hp)
// TODO: Giriş değerlerini kullanarak isimlendirilmiş alan başlatma ile player1'i oluşturun
// TODO: İsimlendirilmiş alan başlatma kullanarak player2'yi oluşturun:
// Name: "Guest", Class: "Novice", HitPoints: 50
// TODO: var deklarasyonunu kullanarak player3'ü oluşturun, ardından alanları atayın:
// Name: "Hero", Class: "Knight", HitPoints: 200
fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker Pool