English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Golang

Sentencias de control de Golang

Funciones y métodos de Golang

Estructuras de Golang

Slices y arreglos de Golang

Cadenas (String) de Golang

Punteros de Golang

Interfaz de Golang

Concurrencia de Golang

Excepciones de Golang

Misceláneas de Golang

Copias de slices en el lenguaje Go

Copias de slices en el lenguaje Goslicees de elementos de almacenamiento de tipos similares, no se permite el almacenamiento de elementos de tipos diferentes en la misma secuencia de longitud variable. En el slice, se puede usarLa función copy()

Copiar un slice a otro slice. En otras palabras, se puede copiar los elementos de un slice a otro slice mediante la función copy().

Sintaxis:

func copia(dst, src []Type) intaquí,dstrepresenta el slice destino, mientras quesrcrepresenta el slice fuente. Devolverá el número de elementos a copiar, que debelen(dst)olen(src)deEl valor。Vamos a utilizar el ejemplo proporcionado para mostrar cómo se utiliza:

package main
import "fmt"
func main() {
    //Crear slice
    slc1 := []int{58, 69, 40, 45, 11, 56, 67, 21, 65}
    var slc2 []int
    slc3 := make([]int, 5)
    slc4 := []int{78, 50, 67, 77}
    //Antes de copiar
    fmt.Println("Slice_1:", slc1)
    fmt.Println("Slice_2:", slc2)
    fmt.Println("Slice_3:", slc3)
    fmt.Println("Slice_4:", slc4)
    //Copiar el slice
    copy_1 := copia(slc2, slc1)
    fmt.Println("\nSlice:", slc2)
    fmt.Println("Número total de elementos copiados:", copia_1)
    copy_2 := copia(slc3, slc1)
    fmt.Println("\nSlice:", slc3)
    fmt.Println("Número total de elementos copiados:", copia_2)
    copy_3 := copia(slc4, slc1)
    fmt.Println("\nSlice:", slc4)
    fmt.Println("Número total de elementos copiados:", copia_3)
    //No se confunda, porque en el ejemplo anterior
    //Se copió slc4línea de código
    //Por lo tanto, se realiza una modificación permanente, es decir
    // slc 4Incluye[58 69 40 45]
    copy_4 := copia(slc1, slc4)
    fmt.Println("\nSlice:", slc1)
    fmt.Println("Número total de elementos copiados:", copia_4)
}

Salida:

Slice_1: [58 69 40 45 11 56 67 21 65]
Slice_2: []
Slice_3: [0 0 0 0 0]
Slice_4: [78 50 67 77]
Slice: []
Número total de elementos copiados: 0
Slice: [58 69 40 45 11]
Número total de elementos copiados: 5
Slice: [58 69 40 45]
Número total de elementos copiados: 4
Slice: [58 69 40 45 11 56 67 21 65]
Número total de elementos copiados: 4

Descripción de uso:En el ejemplo anterior, tenemos cuatro slices de tipo entero y les realizamos una operación de copia:

  • copia 1:= copia(slc2, slc1es el slice de destino, slc2es el slice de origen. Aquí, cuando intentamos copiar en slc1es el slice de destino, slc2es el slice de origen. Aquí, cuando intentamos copiar en slc1al copiar el slice slc2es un slice nil, entonces el método copy devolverá la longitud mínima del slice de origen y el slice de destino, para el slice vacío slc2tiene una longitud mínima de 0.

  • copy_2:= copy(slc3,slc1):Aquí, slc3es el slice de destino, mientras que slc1es el slice de origen. aquí, slc3el slice está vacío, por lo que cuando intentamos usar la función copy() para copiar slc1al copiar el slice a slc3porque la longitud del slice es5porque solo copia desde slc1el slice copiado es5elementos, porque la longitud del slice es5por lo que puede no almacena más de5elementos.

  • copy_3:= copy(slc4,slc1):aquí,slc4es el slice de destino, mientras queslc1es el slice de origen. Cuando intentamos usar la función copy() para copiarslc1 slice aslc4 al copiar el slice desde el índice 0, solo copia4elementos. Debido a queslc4 la longitud del slice es4,por lo que no puede almacenar más de4elementos.

  • copy_4:= copy(slc1,slc4):Aquí, después de la salida puede sentirse confundido. Vea, en la línea de código superior slc4se ha actualizado. Por lo tanto, considere slc4su valor actualizado. Por lo tanto, ahora slc4elementos, mientras que slc4tiene1elementos, mientras que slc9Número de elementos. Por lo tanto, el número total de elementos a copiar será4。

Ejemplo2:

package main 
  
import "fmt"
  
func main() { 
  
    //Slice de origen
    slice_1 := []string{"w3codeboxs", "for", "w3codeboxs", "GFG"} 
  
    //Crear el slice de destino, usando la función make
    slice_2 := make([]string, 3) 
  
    //Antes de copiar
    fmt.Println("Slice_1: ",slice_1) 
    fmt.Println("Slice_2: ",slice_2) 
  
    //Copiar slice_1copiar a slice_2
    Copy_1 := copy(slice_2, slice_1) 
    fmt.Println("\nSlice_1: ",slice_1) 
    fmt.Println("Slice_2: ",slice_2) 
    fmt.Println("Número de elementos copiados: ", Copy_1) 
  
        //Copiar el slice
        //Usar la función de copia
        //Ver claramente el código
    Copy_2 := copy(slice_1, []string{"123w3codeboxs", "gfg"}) 
    fmt.Println("\nSlice_1 : ",slice_1) 
    fmt.Println("Número de elementos copiados:", Copy_2)   
}

Salida:

Slice_1:  [w3codeboxs for w3codeboxs GFG]
Slice_2:  [  ]
Slice_1:  [w3codeboxs for w3codeboxs GFG]
Slice_2:  [w3codeboxs for w3codeboxs]
Número de elementos copiados:  3
Slice_1:  [123w3codeboxs gfg w3codeboxs GFG]
Número de elementos copiados: 2