Maison >développement back-end >Golang >Comment utiliser copy() en langage Go
En langage Go, copy() est utilisé pour copier des tranches. Vous pouvez copier une tranche de tableau vers une autre tranche de tableau. Si les deux tranches de tableau ajoutées n'ont pas la même taille, la plus petite sera utilisée. ; la syntaxe est "copier (tranche source de données, tranche de destination de copie)". Lorsque vous utilisez la fonction copy() pour copier une tranche, si la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie sera incomplète.
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
La fonction intégrée copy() du langage Go peut copier une tranche de tableau dans une autre tranche de tableau. Si les deux tranches de tableau ajoutées n'ont pas la même taille, elles seront copiées en fonction du nombre d'éléments de la tranche de tableau la plus petite.
Copie en langage Go() : copie de tranche (copie de tranche)
La copie de tranche en langage Go utilise la fonction copy() intégrée. Lorsque vous utilisez la fonction copy() pour copier une tranche, si la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie sera incomplète. Le format d'utilisation de la fonction
copy() est le suivant :
copy( destSlice, srcSlice []T) int
srcSlice est la tranche source de données
destSlice est la cible de la copie (c'est-à-dire, copier srcSlice vers destSlice)
La tranche cible doit avoir alloué de l'espace et être suffisant pour le transporter. Le nombre d'éléments copiés, et les types de source et de cible doivent être cohérents
Valeur de retour :
Indique le nombre d'éléments réellement copiés.
Explication
Copiez la tranche src dans la tranche dst et renvoyez le nombre d'éléments copiés avec succès. Si la longueur de la tranche src est supérieure à la longueur de la tranche dst, seuls les éléments de longueur de tranche dst sont copiés.
Le code suivant montre le processus d'utilisation de la fonction copy() pour copier une tranche dans une autre :
slice1 := []int{1, 2, 3, 4, 5} slice2 := []int{5, 4, 3} copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中 copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
Bien que copier des éléments de tranche via une boucle soit plus simple, la fonction copy() intégrée est plus pratique pour utiliser, copier Le premier paramètre de la fonction () est la tranche cible à copier, et le deuxième paramètre est la tranche source. Les deux tranches peuvent partager le même tableau sous-jacent, et il n'y a aucun problème même si elles se chevauchent.
Cas
1. Utilisez du code pour démontrer l'impact des opérations de référence et de copie sur les éléments slice sur les éléments slice.
package main import "fmt" func main() { // 设置元素数量为1000 const elementCount = 1000 // 预分配足够多的元素切片 srcData := make([]int, elementCount) // 将切片赋值 for i := 0; i < elementCount; i++ { srcData[i] = i } // 引用切片数据 refData := srcData // 预分配足够多的元素切片 copyData := make([]int, elementCount) // 将数据复制到新的切片空间中 copy(copyData, srcData) // 修改原始数据的第一个元素 srcData[0] = 999 // 打印引用切片的第一个元素 fmt.Println(refData[0]) // 打印复制切片的第一个和最后一个元素 fmt.Println(copyData[0], copyData[elementCount-1]) // 复制原始数据从4到6(不包含) copy(copyData, srcData[4:6]) for i := 0; i < 5; i++ { fmt.Printf("%d ", copyData[i]) } }
La description du code est la suivante :
La ligne 8 définit le nombre total d'éléments comme 1000.
Ligne 11, pré-allouer une tranche entière de 1000 éléments, cette tranche sera utilisée comme données d'origine.
Lignes 14 à 16, remplissez srcData avec des valeurs entières de 0 à 999.
Ligne 19, refData fait référence à srcData, et la tranche ne copiera pas les éléments en raison de l'opération de signe égal.
Ligne 22, pré-allouer une tranche copyData de même taille (taille égale) et de même type que srcData.
Ligne 24, utilisez la fonction copy() pour copier les données originales dans l'espace de tranche copyData.
Ligne 27, modifiez le premier élément des données originales en 999.
Ligne 30, le premier élément des données référencées va changer.
Ligne 33, imprime les premières données des données copiées Puisque les données sont copiées, elles ne changeront pas.
Ligne 36, copiez les données locales de srcData dans copyData.
Ligne 38~40, imprimez l'élément copyData après avoir copié les données locales.
2. Lorsque la longueur de la tranche source est supérieure à la longueur de la tranche de destination, la copie est incomplète
package main import ( "fmt" ) func main() { //当源切片的长度大于目的切片长度时,复制不完整 var sliceSrc = []string{"PHPCN", "Python", "Golang"} var sliceDst = []string{"Hello", "HaiCoder"} copy(sliceDst, sliceSrc) fmt.Println("sliceDst =", sliceDst) }
[Recommandations associées : Tutoriel vidéo Go, Enseignement de la programmation]
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!