Bonne façon d'initialiser vide tranche
Pour déclarer un vide tranche, avec une absence de taille fixe,
est-il mieux à faire:
mySlice1 := make([]int, 0)
ou:
mySlice2 := []int{}
Juste demander quel est le bon chemin.
- Vous dites "non-taille fixe", mais les tranches sont jamais ont une taille fixe. À moins que tu veux dire avec zéro de la capacité. Remarque, si vous avez une idée/guess/indice de ce que la capacité dont vous pourriez avoir besoin, puis en utilisant les trois argument version est la bonne. E. g. pour construire une tranche de la carte clés:
keys := make([]int, 0, len(m)); for k, v := range m { keys := append(keys,k) }
- Double Possible de Déclarer tranche ou tranche de faire?
Vous devez vous connecter pour publier un commentaire.
Les deux alternatives que vous avez donné sont sémantiquement identiques, et je suppose qu'ils produisent les mêmes instructions de montage.
Pour éviter une inutile de répartition, dans le cas où vous ne finissent pas à l'aide de la tranche, vous pouvez vous en sortir avec une
nil
valeur:Comme écrit dans le Golang.org blog:
json.Marshal()
sera de retournull
pourvar myslice []int
et[]
pour initialisé tranchemyslice := []int{}
reflect.DeepEqual
fait une distinction entre nil tranches et les non-nul tranches:a := []int{}
,var b []int
,reflect.DeepEqual(a, b) // returns false
Ils sont équivalents. Voir ce code:
De sortie:
Les deux tranches ont
0
capacité qui implique les deux tranches ont0
longueur (ne peut pas être plus grande que la capacité) qui implique les deux tranches ont pas d'éléments. Cela signifie que les 2 tranches sont identiques dans tous les aspects.Voir les mêmes questions:
Quel est l'intérêt d'avoir néant tranche et vide tranche dans golang?
nul tranches vs non-nul tranches vs vide tranches dans le langage Go
Comme un complément à @ANisus' réponse...
ci-dessous quelques informations de la "Aller dans l'action" livre, qui je pense vaut la peine de mentionner
Différence entre
nil
&empty
tranchesSi nous considérons une tranche comme ceci:
alors:
Aller de l'aire de jeux exemple:
imprime:
make
?make
ne semble pas renvoyer l'adresse. Je crois que vous ne pouvez pas le faire en une seule étape.Vide tranche et le néant tranche sont initialisés différemment en Aller:
Comme pour tous trois tranches, len et cap sont 0.
make([]int, 0)
est le meilleur parce que Jetbrains GoLand ne se plaignent pas d'être "inutile", comme il le fait dans le cas de[]int{}
. Ceci est utile dans l'écriture de tests unitaires.