En aquest tema, aprendrem sobre les structs en Go, una característica fonamental per a la programació orientada a objectes en aquest llenguatge. Les structs ens permeten agrupar dades relacionades en una sola entitat, facilitant la gestió i manipulació de dades complexes.

Continguts

Què és una Struct?

Una struct (abreviatura de "structure") és un tipus de dades compost que permet agrupar diferents tipus de dades sota un mateix nom. Cada element dins d'una struct es coneix com a camp.

Definició d'una Struct

Per definir una struct en Go, utilitzem la paraula clau type seguida del nom de la struct i la paraula clau struct. Aquí teniu un exemple:

type Persona struct {
    Nom    string
    Edat   int
    Correu string
}

En aquest exemple, hem definit una struct anomenada Persona amb tres camps: Nom, Edat i Correu.

Inicialització de Structs

Hi ha diverses maneres d'inicialitzar una struct en Go:

Inicialització Literal

persona1 := Persona{
    Nom:    "Joan",
    Edat:   30,
    Correu: "[email protected]",
}

Inicialització per Ordre de Camps

persona2 := Persona{"Maria", 25, "[email protected]"}

Inicialització amb Valors Zero

var persona3 Persona

En aquest cas, tots els camps de persona3 tindran els valors zero dels seus respectius tipus ("" per a strings, 0 per a ints, etc.).

Accés als Camps d'una Struct

Per accedir o modificar els camps d'una struct, utilitzem l'operador de punt (.):

persona1.Nom = "Joan Pujol"
fmt.Println(persona1.Nom) // Joan Pujol

Metodes en Structs

Podem definir mètodes per a structs, que són funcions associades a un tipus de struct. Aquí teniu un exemple:

func (p *Persona) Saludar() string {
    return "Hola, em dic " + p.Nom
}

En aquest exemple, hem definit un mètode Saludar per a la struct Persona. Aquest mètode retorna una salutació utilitzant el camp Nom.

Exemples Pràctics

Exemple 1: Definició i Inicialització

package main

import "fmt"

type Persona struct {
    Nom    string
    Edat   int
    Correu string
}

func main() {
    persona := Persona{
        Nom:    "Anna",
        Edat:   28,
        Correu: "[email protected]",
    }

    fmt.Println(persona)
}

Exemple 2: Mètodes en Structs

package main

import "fmt"

type Persona struct {
    Nom    string
    Edat   int
    Correu string
}

func (p *Persona) Saludar() string {
    return "Hola, em dic " + p.Nom
}

func main() {
    persona := Persona{
        Nom:    "Pere",
        Edat:   35,
        Correu: "[email protected]",
    }

    fmt.Println(persona.Saludar())
}

Exercicis

Exercici 1: Definició i Inicialització

Defineix una struct anomenada Cotxe amb els camps Marca, Model i Any. Inicialitza una instància de Cotxe i imprimeix els seus valors.

Exercici 2: Mètodes en Structs

Defineix un mètode anomenat Descripcio per a la struct Cotxe que retorni una cadena amb la marca, el model i l'any del cotxe. Utilitza aquest mètode per imprimir la descripció d'un cotxe.

Solucions

Solució Exercici 1

package main

import "fmt"

type Cotxe struct {
    Marca string
    Model string
    Any   int
}

func main() {
    cotxe := Cotxe{
        Marca: "Toyota",
        Model: "Corolla",
        Any:   2020,
    }

    fmt.Println(cotxe)
}

Solució Exercici 2

package main

import "fmt"

type Cotxe struct {
    Marca string
    Model string
    Any   int
}

func (c *Cotxe) Descripcio() string {
    return fmt.Sprintf("Marca: %s, Model: %s, Any: %d", c.Marca, c.Model, c.Any)
}

func main() {
    cotxe := Cotxe{
        Marca: "Honda",
        Model: "Civic",
        Any:   2018,
    }

    fmt.Println(cotxe.Descripcio())
}

Conclusió

Les structs són una eina poderosa en Go per agrupar dades relacionades i treballar amb elles de manera organitzada. Hem après a definir structs, inicialitzar-les, accedir als seus camps i definir mètodes per a elles. Amb aquests coneixements, estem preparats per abordar estructures de dades més complexes i escriure codi més organitzat i mantenible.

© Copyright 2024. Tots els drets reservats