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)
}
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.