>  기사  >  백엔드 개발  >  Go 언어에서 copy()를 사용하는 방법

Go 언어에서 copy()를 사용하는 방법

青灯夜游
青灯夜游원래의
2023-01-10 11:48:513030검색

Go 언어에서는 copy()를 사용하여 하나의 배열 슬라이스를 다른 배열 슬라이스로 복사할 수 있습니다. 추가된 두 개의 배열 슬라이스가 동일한 크기가 아닌 경우 요소 수를 복사합니다. ; 구문은 "복사(데이터 소스 슬라이스, 복사 대상 슬라이스)"입니다. copy() 함수를 사용하여 슬라이스를 복사할 때 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전해집니다.

Go 언어에서 copy()를 사용하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어의 내장 함수인 copy()는 하나의 배열 슬라이스를 다른 배열 슬라이스로 복사할 수 있습니다. 추가된 두 개의 배열 슬라이스가 동일한 크기가 아닌 경우 더 작은 배열 슬라이스의 요소 수에 따라 복사됩니다.

Go 언어 copy(): 슬라이스 복사(슬라이스 복사)

Go 언어의 슬라이스 복사는 내장된 copy() 함수를 사용합니다. copy() 함수를 사용하여 슬라이스를 복사할 때 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전해집니다.

copy() 함수의 사용 형식은 다음과 같습니다.

copy( destSlice, srcSlice []T) int
  • srcSlice는 데이터 소스 슬라이스입니다.

  • destSlice는 복사 대상입니다(즉, srcSlice를 destSlice로 복사).

    대상 슬라이스 공간이 할당되어 있고 운반하기에 충분해야 합니다. 복사된 요소 수, 소스와 대상의 유형이 일치해야 합니다

반환 값:

  • 실제로 복사된 요소 수를 나타냅니다.

Explanation

  • 슬라이스 src를 슬라이스 dst에 복사하고 성공적으로 복사된 요소의 수를 반환합니다. 슬라이스 src의 길이가 dst 슬라이스의 길이보다 길면 dst 슬라이스 길이 요소만 복사됩니다.

다음 코드는 copy() 함수를 사용하여 한 슬라이스를 다른 슬라이스로 복사하는 프로세스를 보여줍니다.

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个位置

루프를 통해 슬라이스 요소를 복사하는 것이 더 간단하지만 내장된 copy() 함수가 더 간단합니다. 사용하기 편리함, 복사 () 함수의 첫 번째 매개변수는 복사할 대상 슬라이스이고, 두 번째 매개변수는 소스 슬라이스입니다. 두 슬라이스는 동일한 기본 배열을 공유할 수 있으므로 겹쳐도 문제가 없습니다.

사례

1. 코드를 사용하여 슬라이스 요소의 슬라이스 요소에 대한 참조 및 복사 작업의 영향을 보여줍니다.

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])
    }
}

Go 언어에서 copy()를 사용하는 방법

코드 설명은 다음과 같습니다.

  • 8행에서는 전체 요소 수를 1000으로 정의합니다.

  • 라인 11, 1000개의 요소가 포함된 정수 슬라이스를 미리 할당합니다. 이 슬라이스는 원본 데이터로 사용됩니다.

  • 라인 14-16, srcData를 0에서 999 사이의 정수 값으로 채웁니다.

  • 라인 19, refData는 srcData를 참조하며 슬라이스는 등호 연산으로 인해 요소를 복사하지 않습니다.

  • 라인 22, srcData와 동일한 크기(동일 크기) 및 동일한 유형의 copyData 슬라이스를 미리 할당합니다.

  • 라인 24, copy() 함수를 사용하여 원본 데이터를 copyData 슬라이스 공간에 복사합니다.

  • 라인 27, 원본 데이터의 첫 번째 요소를 999로 수정합니다.

  • 라인 30에서 참조된 데이터의 첫 번째 요소가 변경됩니다.

  • 33번째 줄은 복사된 데이터 중 첫 번째 데이터를 인쇄하는 것이므로 변경되지 않습니다.

  • 36번째 줄, srcData의 로컬 데이터를 copyData에 복사합니다.

  • 라인 38~40, 로컬 데이터를 복사한 후 copyData 요소를 인쇄합니다.

2. 소스 슬라이스의 길이가 대상 슬라이스의 길이보다 길면 복사가 불완전합니다

package main
import (
	"fmt"
)
func main() {
	//当源切片的长度大于目的切片长度时,复制不完整
	var sliceSrc = []string{"PHPCN", "Python", "Golang"}
	var sliceDst = []string{"Hello", "HaiCoder"}
	copy(sliceDst, sliceSrc)
	fmt.Println("sliceDst =", sliceDst)
}

Go 언어에서 copy()를 사용하는 방법

[관련 권장 사항: Go 비디오 튜토리얼, 프로그래밍 교육]

위 내용은 Go 언어에서 copy()를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.