Maison >développement back-end >Golang >Go Slices : Pourquoi les tranches c et d ont-elles leurs longueurs et capacités respectives ?
Go Slices : Comprendre la capacité et la longueur
Lorsque vous travaillez avec des tranches dans Go, il est crucial de comprendre les concepts de capacité et de longueur. Ces propriétés jouent un rôle important dans les opérations de tranche et affectent le comportement des tranches lorsqu'elles sont découpées ou ajoutées.
Considérez l'exemple de code suivant :
func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b := make([]int, 0, 5) // [] len=0 cap=5 c := b[:2] // [0,0] len=2 cap=5 d := c[2:5] // [0,0,0] len=3 cap=3 }
Ce code soulève diverses questions concernant la longueur et capacité des tranches c et d :
Pourquoi c a-t-il une longueur de 2 et contient-il [0,0]?
Bien que b soit initialement vide ([], length=0), il est important de noter que les tableaux et tranches Go sont toujours initialisés avec leurs valeurs nulles. Dans le cas d'entiers, la valeur zéro est 0. Par conséquent, lorsque vous tranchez b avec [:2], vous créez une nouvelle tranche qui hérite des valeurs remises à zéro de b.
Pourquoi d a-t-il une capacité de 3 ?
Lorsque vous découpez une tranche dans Go, il réutilise le même tableau sous-jacent. Dans ce cas, d partage le même tableau de sauvegarde que c. La capacité de d est calculée comme fin-début, où début et fin sont respectivement les indices de début et de fin de l'expression de tranche ([2:5]). Par conséquent, la capacité de d est 5 (fin) - 2 (début) = 3.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!