Maison >développement back-end >Golang >Quelles sont les méthodes les plus concises et les plus performantes pour copier en profondeur des tranches en Go ?
Lorsque vous travaillez avec des tranches dans Go, vous pouvez rencontrer le besoin de copier en profondeur une tranche, en vous assurant que les modifications apportées à la copie sont prises en compte. n’affecte pas la tranche d’origine. Cet article explore deux méthodes concises et performantes pour y parvenir.
Une technique établie consiste à utiliser la fonction append :
copy := append([]T{}, orig...)
Cependant, une méthode alternative utilisant la copie intégrée est apparue :
cpy := make([]T, len(orig)) copy(cpy, orig)
La documentation de la fonction de copie indique qu'elle copie les éléments d'une tranche source vers une tranche de destination, en les chevauchant si nécessaire. Elle renvoie le nombre d'éléments copiés, qui est limité par la longueur des deux tranches.
Remarque : Les deux méthodes copient uniquement les valeurs de la tranche. Si la tranche contient des pointeurs ou des structures avec des champs de pointeur, ces pointeurs continueront à pointer vers les mêmes valeurs que dans la tranche d'origine.
Résultats du benchmark :
Pour évaluer la performance de ces méthodes, un benchmark a été réalisé :
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
Comme vous pouvez le constater, les deux approches ont des caractéristiques très similaires performances.
Analyse de l'assembly :
L'examen de l'assembly généré pour chaque méthode révèle que les deux appellent runtime.growslice ou runtime.makeslice, qui sont probablement responsables de l'exécution de tout zéro remplissage requis pour la nouvelle tranche.
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!