Littéraux composites en Go

Jay Singh 30 janvier 2023
  1. Découper les littéraux composites dans Go
  2. Littéraux composites de tableau dans Go
Littéraux composites en Go

Go a divers types d’identifiants intégrés, également appelés types prédéclarés, tels que booléen, chaîne, numérique (float32, float64, int, int8, int16, int32, complexe), etc.

Il existe également des types composites, constitués de types prédéclarés. Les valeurs des tableaux, des structures, des tranches et des cartes sont construites à l’aide d’un littéral composite.

Chaque fois qu’ils sont évalués, une nouvelle valeur est créée. Il se compose du type littéral suivi d’une liste d’éléments liés par des accolades.

Examinons quelques instances littérales composites.

Découper les littéraux composites dans Go

Slice est un type de données composite qui fonctionne de manière similaire à un tableau en ce sens qu’il contient des éléments du même type de données. La distinction essentielle entre un tableau et une tranche est qu’une tranche peut changer de taille dynamiquement, alors qu’un tableau ne le peut pas.

package main

import "fmt"

func main() {
    s1 := []int{1, 2, 3, 4}
    fmt.Println(s1)
}

Production:

[1 2 3 4]

Littéraux composites de tableau dans Go

Lorsqu’une carte est affectée à une autre, les deux cartes partagent tous les composants (sous-jacents). L’ajout d’éléments à (ou la suppression d’éléments d’) une carte affectera l’autre.

Si une tranche est affectée à une autre, les deux partageront tous les composants (sous-jacents), tout comme les affectations de carte. Leurs longueurs et capacités relatives sont égales.

Si la longueur ou la capacité d’une tranche change ultérieurement, le changement ne se reflète pas dans l’autre tranche. Tous les éléments sont copiés du tableau source vers le tableau de destination lorsqu’un est affecté à un autre.

Les deux tableaux ne partagent aucun élément.

package main

import "fmt"

func main() {
    m0 := map[int]int{0: 2, 1: 3, 2: 4}
    m1 := m0
    m1[0] = 4
    fmt.Println(m0, m1)

    s0 := []int{5, 6, 7}
    s1 := s0
    s1[0] = 4
    fmt.Println(s0, s1)

    a0 := [...]int{5, 6, 7}
    a1 := a0
    a1[0] = 4
    fmt.Println(a0, a1)
}

Production:

map[0:4 1:3 2:4] map[0:4 1:3 2:4]
[4 6 7] [4 6 7]
[5 6 7] [4 6 7]