Menu
Coddy logo textTech

Anonim Struct'lar

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 15 / 107.

Anonim bir struct, isimlendirilmiş bir türü olmayan bir struct'tır. Yapısını tanımlar ve type anahtar kelimesini kullanmadan tek bir adımda bir örneğini oluşturursunuz.

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

Bu, yeniden kullanılabilir bir tür bildirmeden doğrudan bir struct değeri oluşturur. Anonim struct'lar, kodunuzun başka bir yerinde kullanılmayacak hızlı, tek seferlik bir veri yapısına ihtiyaç duyduğunuzda kullanışlıdır.

Yaygın bir kullanım durumu, tek bir fonksiyon veya test için ilgili verileri gruplandırmaktır.

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

Anonim struct'lar, her bir test senaryosunun benzersiz alanlara sahip olduğu tablo güdümlü testlerde de popülerdir.

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

Anonim struct'ların bir tip adı olmadığı için, üzerlerinde metot tanımlayamaz veya tipi başka bir yerde yeniden kullanamazsınız. Bunları geçici, yerelleştirilmiş veri gruplama için kullanın. Birden çok kez referans vereceğiniz her şey için bunun yerine isimlendirilmiş bir struct tipi tanımlayın.

challenge icon

Görev

Kolay

Yeniden kullanılabilir bir türe ihtiyaç duymayan, tek seferlik veri gruplandırmaları için anonim struct'ların (anonymous structs) ne kadar kullanışlı olduğunu gösteren hızlı bir yapılandırma sistemi oluşturalım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • config.go: Parametre olarak bir sunucu adı (string), port (int) ve hata ayıklama modu (bool) alan GetServerConfig adında bir fonksiyon oluşturun. Bu fonksiyon, bu üç değeri Name, Port ve Debug alanları olarak içeren anonim bir struct döndürmelidir. Bu yapılandırma yalnızca bir yerde kullanıldığı için, onun için isimlendirilmiş bir tür tanımlamaya gerek yoktur.
  • main.go: Sunucu yapılandırma değerlerini girdiden okuyun, GetServerConfig fonksiyonunuzu çağırın ve yapılandırma ayrıntılarını görüntüleyin.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: Sunucu adı
  • Satır 2: Port numarası
  • Satır 3: Hata ayıklama modu (true veya false)

Çıktı formatı:

Server: [Name]
Port: [Port]
Debug: [Debug]

Örneğin, api-server, 8080 ve true verildiğinde, çıktınız şöyle olmalıdır:

Server: api-server
Port: 8080
Debug: true

Anonim struct'ın, yalnızca bir kez kullanılan bir türle kod tabanınızı kalabalıklaştırmadan gruplandırılmış verileri döndürmenize nasıl olanak tanıdığına dikkat edin.

Kopya kağıdı

Anonim struct, type anahtar kelimesini kullanmadan tek bir adımda tanımlanan ve örneği oluşturulan, isimlendirilmiş bir türü olmayan bir struct'tır:

person := struct {
    Name string
    Age  int
}{
    Name: "Alice",
    Age:  30,
}

Anonim struct'lar, kodunuzun başka bir yerinde tekrar kullanılmayacak tek seferlik veri yapıları için kullanışlıdır.

Yaygın kullanım durumları, tek bir fonksiyon için ilgili verileri gruplandırmayı içerir:

config := struct {
    Host string
    Port int
}{
    Host: "localhost",
    Port: 8080,
}
fmt.Println(config.Host) // localhost

Ve tablo tabanlı testler:

tests := []struct {
    input    int
    expected int
}{
    {1, 2},
    {5, 10},
}

Anonim struct'lar üzerlerinde tanımlanmış metodlara sahip olamazlar veya bir tür olarak tekrar kullanılamazlar. Bunları geçici, yerelleştirilmiş veri gruplandırması için kullanın. Birden çok kez başvurulan türler için bunun yerine isimlendirilmiş bir struct tanımlayın.

Fonksiyonlar anonim struct'lar döndürebilir:

func GetConfig() struct {
    Name string
    Port int
} {
    return struct {
        Name string
        Port int
    }{
        Name: "server",
        Port: 8080,
    }
}

Kendin dene

package main

import (
	"fmt"
)

func main() {
	// Giriş değerlerini oku
	var name string
	var port int
	var debug bool

	fmt.Scanln(&name)
	fmt.Scanln(&port)
	fmt.Scanln(&debug)

	// TODO: Giriş değerleri ile GetServerConfig fonksiyonunu çağırın
	// ve döndürülen anonim yapıyı (struct) saklayın

	// TODO: Yapılandırmayı istenen formatta yazdırın:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconKendini test et

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