web-dev-qa-db-fra.com

initialisation d'une structure contenant une tranche de structures dans Golang

J'ai une structure que je veux initialiser avec une tranche de structures dans golang, mais j'essaie de savoir s'il existe une version plus efficace de l'ajout de chaque structure nouvellement générée à la tranche:

package main

import (
    "fmt"
    "math/Rand"
)

type LuckyNumber struct {
    number int
}

type Person struct {
    lucky_numbers []LuckyNumber
}

func main() {
    count_of_lucky_nums := 10
    // START OF SECTION I WANT TO OPTIMIZE
    var tmp []LuckyNumber
    for i := 0; i < count_of_lucky_nums; i++ {
        tmp = append(tmp, LuckyNumber{Rand.Intn(100)})
    }
    a := Person{tmp}
    // END OF SECTION I WANT TO OPTIMIZE
    fmt.Println(a)
}
8
mgoldwasser

Vous pouvez utiliser make() comme le propose icza, vous pouvez également l'utiliser de cette façon:

tmp := make([]LuckyNumber, 0, countOfLuckyNums)
for i := 0; i < countOfLuckyNums; i++ {
    tmp = append(tmp, LuckyNumber{Rand.Intn(100)})
}
a := Person{tmp}
fmt.Println(a)

De cette façon, vous n'avez pas à allouer de la mémoire pour tmp plusieurs fois: vous ne le faites qu'une seule fois, lorsque vous appelez make. Mais, contrairement à la version où vous appelleriez make([]LuckyNumber, countOfLuckyNums), ici, tmp ne contient que des valeurs initialisées, pas des valeurs non initialisées, mises à zéro. Selon votre code, cela peut faire une différence ou non.

3
Fabien