Menu
Coddy logo textTech

Struktury anonimowe

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 15 z 107.

Struktura anonimowa to struktura bez nazwanego typu. Definiujesz jej strukturę i tworzysz jej instancję w jednym kroku, bez użycia słowa kluczowego type.

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

Tworzy to wartość struktury bezpośrednio, bez deklarowania typu wielokrotnego użytku. Struktury anonimowe są przydatne, gdy potrzebujesz szybkiej, jednorazowej struktury danych, która nie będzie używana nigdzie indziej w Twoim kodzie.

Typowym zastosowaniem jest grupowanie powiązanych danych na potrzeby pojedynczej funkcji lub testu.

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

Struktury anonimowe są również popularne w testach opartych na tabelach, w których każdy przypadek testowy ma unikalne pola.

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

Ponieważ anonimowe struktury nie mają nazwy typu, nie możesz definiować dla nich metod ani ponownie używać tego typu w innym miejscu. Używaj ich do tymczasowego grupowania danych w ograniczonym zakresie. Jeśli zamierzasz odwoływać się do czegoś wielokrotnie, zdefiniuj zamiast tego nazwany typ struktury.

challenge icon

Wyzwanie

Łatwy

Zbudujmy prosty system konfiguracji, który pokazuje, kiedy przydają się struktury anonimowe — do jednorazowego grupowania danych, które nie wymaga wielokrotnego użycia typu.

Podzielisz kod na dwa pliki:

  • config.go: Utwórz funkcję o nazwie GetServerConfig, która przyjmuje jako parametry nazwę serwera (string), port (int) oraz tryb debugowania (bool). Ta funkcja powinna zwracać strukturę anonimową zawierającą te trzy wartości w polach: Name, Port i Debug. Ponieważ ta konfiguracja jest używana tylko w jednym miejscu, nie ma potrzeby definiowania dla niej nazwanego typu.
  • main.go: Odczytaj wartości konfiguracji serwera z wejścia, wywołaj funkcję GetServerConfig i wyświetl szczegóły konfiguracji.

Dane wejściowe będą następujące:

  • Wiersz 1: Nazwa serwera
  • Wiersz 2: Numer portu
  • Wiersz 3: Tryb debugowania (true lub false)

Format wyjściowy:

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

Na przykład dla wartości api-server, 8080 i true wynik powinien wyglądać tak:

Server: api-server
Port: 8080
Debug: true

Zwróć uwagę, że struktura anonimowa pozwala zwracać pogrupowane dane bez zaśmiecania bazy kodu typem używanym tylko raz.

Spróbuj swoich sił

package main

import (
	"fmt"
)

func main() {
	// Wczytaj wartości wejściowe
	var name string
	var port int
	var debug bool

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

	// TODO: Wywołaj GetServerConfig z wartościami wejściowymi
	// i zapisz zwróconą strukturę anonimową

	// TODO: Wypisz konfigurację w wymaganym formacie:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online