Menu
Coddy logo textTech

Struct anonime

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 15 di 107.

Una struct anonima è una struct senza un tipo con nome. Ne definisci la struttura e crei un'istanza in un unico passaggio, senza usare la parola chiave type.

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

Questo crea direttamente un valore struct senza dichiarare un tipo riutilizzabile. Le struct anonime sono utili quando hai bisogno di una struttura dati rapida e occasionale che non verrà usata altrove nel tuo codice.

Un caso d'uso comune consiste nel raggruppare dati correlati per una singola funzione o un singolo test.

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

Le struct anonime sono molto usate anche nei test basati su tabelle, in cui ogni caso di test ha campi unici.

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

Poiché le struct anonime non hanno un nome di tipo, non puoi definirvi metodi né riutilizzare il tipo altrove. Usale per raggruppare dati temporanei e circoscritti. Per tutto ciò a cui farai riferimento più volte, definisci invece un tipo struct con nome.

challenge icon

Sfida

Facile

Costruiamo un rapido sistema di configurazione che mostri quando le struct anonime sono ideali: per raggruppare dati una tantum che non richiedono un tipo riutilizzabile.

Organizzerai il codice in due file:

  • config.go: crea una funzione chiamata GetServerConfig che accetta come parametri il nome di un server (string), la porta (int) e la modalità di debug (bool). Questa funzione deve restituire una struct anonima contenente questi tre valori come campi: Name, Port e Debug. Poiché questa configurazione viene usata in un solo punto, non è necessario definire un tipo con nome.
  • main.go: leggi i valori di configurazione del server dall'input, chiama la funzione GetServerConfig e visualizza i dettagli della configurazione.

Verranno forniti i seguenti input:

  • Riga 1: nome del server
  • Riga 2: numero di porta
  • Riga 3: modalità di debug (true o false)

Formato dell'output:

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

Per esempio, dati api-server, 8080 e true, l'output dovrebbe essere:

Server: api-server
Port: 8080
Debug: true

Nota come la struct anonima ti consenta di restituire dati raggruppati senza appesantire il codice con un tipo utilizzato una sola volta.

Provalo tu

package main

import (
	"fmt"
)

func main() {
	// Leggi i valori di input
	var name string
	var port int
	var debug bool

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

	// TODO: Chiama GetServerConfig con i valori di input
	// e memorizza la struct anonima restituita

	// TODO: Stampa la configurazione nel formato richiesto:
	// Server: [Name]
	// Port: [Port]
	// Debug: [Debug]
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online