Anonim Struct'lar
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 15 / 107.
Anonim struct, adlandırılmış bir türü olmayan bir struct'tır. Yapısını tanımlar ve type anahtar kelimesini kullanmadan tek adımda bir örneğini oluşturursun.
person := struct {
Name string
Age int
}{
Name: "Alice",
Age: 30,
}Bu, yeniden kullanılabilir bir tür tanımlamadan doğrudan bir struct değeri oluşturur. Anonim struct’lar, kodunuzun başka bir yerinde kullanılmayacak hızlı ve tek seferlik bir veri yapısına ihtiyaç duyduğunuzda kullanışlıdır.
Yaygın bir kullanım durumu, ilgili verileri tek bir işlev veya test için gruplandırmaktır.
config := struct {
Host string
Port int
}{
Host: "localhost",
Port: 8080,
}
fmt.Println(config.Host) // localhostAnonim yapılar, her test durumunun benzersiz alanlara sahip olduğu tablo tabanlı testlerde de yaygın olarak kullanılır.
tests := []struct {
input int
expected int
}{
{1, 2},
{5, 10},
}Anonim yapıların tür adı olmadığından, üzerlerinde metot tanımlayamaz veya türü başka bir yerde yeniden kullanamazsınız. Bunları geçici, yerel veri gruplandırma işlemleri için kullanın. Birden fazla kez başvuracağınız herhangi bir şey için bunun yerine adlandırılmış bir yapı türü tanımlayın.
Görev
KolayYeniden kullanılabilir bir türe ihtiyaç duymayan, tek seferlik veri gruplandırma işlemlerinde anonim yapıların ne zaman öne çıktığını gösteren hızlı bir yapılandırma sistemi oluşturalım.
Kodunuzu iki dosyaya ayıracaksınız:
config.go: Sunucu adını (string), bağlantı noktasını (int) ve hata ayıklama modunu (bool) parametre olarak alanGetServerConfigadlı bir işlev oluşturun. Bu işlev, bu üç değeriName,PortveDebugalanları olarak içeren anonim bir yapı döndürmelidir. Bu yapılandırma yalnızca tek bir yerde kullanıldığından, bunun için adlandırılmış bir tür tanımlamanıza gerek yoktur.main.go: Sunucu yapılandırma değerlerini girdiden okuyun,GetServerConfigişlevinizi çağırın ve yapılandırma ayrıntılarını görüntüleyin.
Aşağıdaki girdiler sağlanacaktır:
- 1. satır: Sunucu adı
- 2. satır: Bağlantı noktası numarası
- 3. satır: Hata ayıklama modu (
trueveyafalse)
Çıktı biçimi:
Server: [Name]
Port: [Port]
Debug: [Debug]Örneğin, api-server, 8080 ve true verildiğinde çıktınız şu şekilde olmalıdır:
Server: api-server
Port: 8080
Debug: trueAnonim yapının, yalnızca bir kez kullanılan bir türle kod tabanınızı gereksiz yere karmaşıklaştırmadan gruplandırılmış verileri döndürmenize nasıl olanak tanıdığına dikkat edin.
Kendin dene
package main
import (
"fmt"
)
func main() {
// Girdi değerlerini oku
var name string
var port int
var debug bool
fmt.Scanln(&name)
fmt.Scanln(&port)
fmt.Scanln(&debug)
// TODO: GetServerConfig'i girdi değerleriyle çağır
// ve dönen anonim struct'ı sakla
// TODO: Yapılandırmayı gerekli formatta yazdır:
// Server: [Name]
// Port: [Port]
// Debug: [Debug]
}
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