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 ?

Quelles sont les méthodes les plus concises et les plus performantes pour copier en profondeur des tranches en Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 19:26:151004parcourir

What are the Most Concise and Performant Ways to Deep Copy Slices in Go?

Concision et performances dans la copie approfondie des tranches

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn