Sıfır Değerler ve Varsayılanlar
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 17 / 107.
Go'da her değişkenin bir sıfır değeri vardır: bir değişkeni açıkça başlatmadan bildirdiğinizde atanan varsayılan değer. Sıfır değerlerini anlamak, struct'larla çalışmak için çok önemlidir; çünkü başlatılmamış alanlar bu varsayılanları otomatik olarak alır.
Her türün kendine ait bir sıfır değeri vardır:
| Tür | Sıfır Değeri |
|---|---|
| int, float64 | 0 |
| string | "" (boş dize) |
| bool | false |
| pointer, slice, map | nil |
Bir struct oluşturduğunuzda, açıkça ayarlamadığınız her alan sıfır değerini alır.
type User struct {
Name string
Age int
Active bool
}
func main() {
var u User
fmt.Println(u.Name) // "" (boş dize)
fmt.Println(u.Age) // 0
fmt.Println(u.Active) // false
}Bu, kısmi başlatma için de geçerlidir. Yalnızca belirttiğiniz alanlar özel değerler alır.
u := User{Name: "Alice"}
fmt.Println(u.Age) // 0
fmt.Println(u.Active) // false
Sıfır değerleri, yapıların açıkça başlatılmadan hemen kullanılabilmesini sağlar. Ancak dilimler ve eşlemeler gibi başvuru türleriyle çalışırken dikkatli olun. Bunların sıfır değeri nil’dir; bu da başlatmadan kullanmaya çalışırsanız çalışma zamanı paniklerine neden olabilir.
Görev
KolayGo'da sıfır değerlerin nasıl çalıştığını gösteren bir oyuncu profili sistemi oluşturalım. Bazı alanları açıkça ayarlarken diğerlerinin varsayılan sıfır değerlerine güveneceğin bir oyun profili oluşturacaksın.
Kodunu iki dosyaya ayıracaksın:
player.go: Şu alanlara sahip birPlayeryapısı tanımla:Username(string),Level(int),Score(int),IsPremium(bool) veGuildName(string). Ayrıca oyuncunun tüm bilgilerini gösteren biçimlendirilmiş bir dize döndüren birDisplayProfileyöntemi oluştur.main.go: Girdiden bir kullanıcı adı oku ve yalnızca kısmi başlatma kullanarak bir Player oluştur: sadeceUsernamealanını ayarla. Ardından, Go'nun ayarlanmamış alanları sıfır değerleriyle nasıl doldurduğunu görmek için profilin tamamını görüntüle.
Aşağıdaki girdi sağlanacaktır:
- 1. satır: Oyuncunun kullanıcı adı
DisplayProfile yöntemin tam olarak şu biçimde bir dize döndürmelidir:
Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]Örneğin, kullanıcı adı ShadowKnight ise çıktın, kullanıcı adını ve başlatılmamış alanların tüm sıfır değerlerini göstermelidir:
Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: Guild alanının iki nokta üst üste işaretinden sonra hiçbir şey göstermediğine dikkat et: bu, boş dize sıfır değeridir. Bu görev, açık bir değer sağlamadığında Go'nun her türe tam olarak ne atadığını görmene yardımcı olur.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Girdiden kullanıcı adını oku
var username string
fmt.Scanln(&username)
// TODO: Kısmi başlatma kullanarak bir Player oluştur
// Yalnızca Username alanını ayarla, diğer alanların sıfır değerleri kullanmasına izin ver
// TODO: DisplayProfile metodunu kullanarak oyuncunun profilini görüntüle
}
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 PoolKendi başına pratik yap: Online Go derleyicisi