Menu
Coddy logo textTech

Anonyme Structs

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy. Lektion 15 von 107.

Eine anonyme Struktur ist eine Struktur ohne benannten Typ. Du definierst ihre Struktur und erstellst in einem Schritt eine Instanz, ohne das Schlüsselwort type zu verwenden.

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

Dies erstellt direkt einen Struct-Wert, ohne einen wiederverwendbaren Typ zu deklarieren. Anonyme Structs sind nützlich, wenn du schnell eine einmalige Datenstruktur benötigst, die an keiner anderen Stelle in deinem Code verwendet wird.

Ein häufiger Anwendungsfall ist das Gruppieren zusammengehöriger Daten für eine einzelne Funktion oder einen einzelnen Test.

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

Anonyme Strukturen sind auch bei tabellengesteuerten Tests beliebt, bei denen jeder Testfall eindeutige Felder hat.

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

Da anonyme Strukturen keinen Typnamen haben, kannst du für sie keine Methoden definieren und den Typ auch nicht an anderer Stelle wiederverwenden. Verwende sie für eine vorübergehende, lokale Gruppierung von Daten. Für alles, worauf du mehrfach verweisen wirst, definiere stattdessen einen benannten Strukturtyp.

challenge icon

Aufgabe

Einfach

Erstellen wir ein schnelles Konfigurationssystem, das zeigt, wann anonyme Structs besonders nützlich sind: zur einmaligen Gruppierung von Daten, für die kein wiederverwendbarer Typ benötigt wird.

Du organisierst deinen Code über zwei Dateien:

  • config.go: Erstelle eine Funktion namens GetServerConfig, die einen Servernamen (string), einen Port (int) und den Debug-Modus (bool) als Parameter entgegennimmt. Diese Funktion sollte ein anonymes Struct zurückgeben, das diese drei Werte als Felder enthält: Name, Port und Debug. Da diese Konfiguration nur an einer Stelle verwendet wird, ist es nicht nötig, dafür einen benannten Typ zu definieren.
  • main.go: Lies die Konfigurationswerte des Servers aus der Eingabe ein, rufe deine Funktion GetServerConfig auf und zeige die Konfigurationsdetails an.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Servername
  • Zeile 2: Portnummer
  • Zeile 3: Debug-Modus (true oder false)

Ausgabeformat:

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

Wenn beispielsweise api-server, 8080 und true angegeben werden, sollte deine Ausgabe folgendermaßen aussehen:

Server: api-server
Port: 8080
Debug: true

Beachte, wie das anonyme Struct es dir ermöglicht, gruppierte Daten zurückzugeben, ohne deine Codebasis mit einem Typ zu überladen, der nur einmal verwendet wird.

Probier es selbst

package main

import (
	"fmt"
)

func main() {
	// Eingabewerte lesen
	var name string
	var port int
	var debug bool

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

	// TODO: Rufe GetServerConfig mit den Eingabewerten auf
	// und speichere die zurückgegebene anonyme Struktur

	// TODO: Gib die Konfiguration im erforderlichen Format aus:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler