Menu
Coddy logo textTech

Valori zero e predefiniti

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

In Go, ogni variabile ha un valore zero: il valore predefinito assegnato quando dichiari una variabile senza inizializzarla esplicitamente. Comprendere i valori zero è essenziale per lavorare con le struct, poiché i campi non inizializzati ricevono automaticamente questi valori predefiniti.

Ogni tipo ha il proprio valore zero:

TipoValore zero
int, float640
string"" (stringa vuota)
boolfalse
pointer, slice, mapnil

Quando crei una struct, qualsiasi campo che non imposti esplicitamente riceve il suo valore zero.

type User struct {
    Name   string
    Age    int
    Active bool
}

func main() {
    var u User
    fmt.Println(u.Name)   // "" (stringa vuota)
    fmt.Println(u.Age)    // 0
    fmt.Println(u.Active) // false
}

Questo vale anche per l'inizializzazione parziale. Solo i campi che specifichi ricevono valori personalizzati.

u := User{Name: "Alice"}
fmt.Println(u.Age)    // 0
fmt.Println(u.Active) // false

I valori zero rendono le struct immediatamente utilizzabili senza inizializzazione esplicita. Tuttavia, fai attenzione ai tipi riferimento come slice e map. Il loro valore zero è nil, che può causare panic in fase di esecuzione se provi a usarli senza inizializzarli.

challenge icon

Sfida

Facile

Costruiamo un sistema di profili giocatore che dimostra come funzionano i valori zero in Go. Creerai un profilo di gioco in cui alcuni campi sono impostati esplicitamente, mentre gli altri usano i rispettivi valori zero predefiniti.

Organizzerai il codice in due file:

  • player.go: Definisci una struct Player con i seguenti campi: Username (string), Level (int), Score (int), IsPremium (bool) e GuildName (string). Crea anche un metodo DisplayProfile che restituisca una stringa formattata con tutte le informazioni del giocatore.
  • main.go: Leggi uno username dall'input e crea un Player usando solo un'inizializzazione parziale: imposta soltanto il campo Username. Poi visualizza il profilo completo per vedere come Go assegna i valori zero ai campi non impostati.

Verrà fornito il seguente input:

  • Riga 1: lo username del giocatore

Il metodo DisplayProfile dovrebbe restituire una stringa in questo formato esatto:

Username: [Username]
Level: [Level]
Score: [Score]
Premium: [IsPremium]
Guild: [GuildName]

Per esempio, se lo username è ShadowKnight, l'output dovrebbe mostrare lo username insieme a tutti i valori zero dei campi non inizializzati:

Username: ShadowKnight
Level: 0
Score: 0
Premium: false
Guild: 

Nota che il campo Guild non mostra nulla dopo i due punti: questo è il valore zero della stringa vuota. Questa sfida ti aiuta a vedere esattamente cosa assegna Go a ogni tipo quando non fornisci un valore esplicito.

Provalo tu

package main

import (
	"fmt"
)

func main() {
	// Leggi il nome utente dall'input
	var username string
	fmt.Scanln(&username)

	// TODO: Crea un Player usando l'inizializzazione parziale
	// Imposta solo il campo Username e lascia che gli altri campi usino i valori zero

	// TODO: Mostra il profilo del giocatore usando il metodo DisplayProfile
}
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