Menu
Coddy logo textTech

Inicialização de Structs

Parte da seção Programação Orientada a Objetos do Journey de GO da Coddy — lição 9 de 107.

O Go oferece várias maneiras de inicializar structs, cada uma útil em diferentes situações.

Inicialização de campos nomeados

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Inicialização posicional (a ordem deve corresponder à declaração do campo)

p2 := Person{"Bob", 30, "London"}

Inicialização com valor zero (todos os campos recebem valores padrão)

p3 := Person{}
// Name: "", Age: 0, City: ""

Inicialização parcial (campos não definidos recebem valores zero)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Ponteiro para uma struct usando &

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

Usando var e depois atribuindo campos

var p6 Person
p6.Name = "Eve"
p6.Age = 22

A inicialização de campos nomeados é a abordagem mais comum e legível. Use & quando você precisar de um ponteiro para a struct.

challenge icon

Desafio

Médio

Crie três objetos Player usando diferentes métodos de inicialização:

  • player1: Inicialização de campos nomeados usando os valores de entrada
  • player2: Inicialização de campos nomeados com Name: "Guest", Class: "Novice", HitPoints: 50
  • player3: Use a declaração var e, em seguida, atribua cada campo individualmente

Folha de consulta

Go oferece várias maneiras de inicializar structs:

Inicialização de campos nomeados (mais comum e legível):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Inicialização posicional (a ordem deve corresponder à declaração dos campos):

p2 := Person{"Bob", 30, "London"}

Inicialização com valor zero (todos os campos recebem valores padrão):

p3 := Person{}
// Name: "", Age: 0, City: ""

Inicialização parcial (campos não definidos recebem valores zero):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Ponteiro para uma struct usando &:

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

Usando var e depois atribuindo campos:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Experimente você mesmo

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: Crie player1 usando inicialização de campos nomeados com os valores de entrada

    // TODO: Crie player2 usando inicialização de campos nomeados:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: Crie player3 usando declaração var, depois atribua os campos:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos