>백엔드 개발 >Golang >Go에서 `copy()` 함수는 어떻게 작동하나요?

Go에서 `copy()` 함수는 어떻게 작동하나요?

DDD
DDD원래의
2024-11-03 11:50:29449검색

How does the `copy()` function work in Go?

Go에서 복사 기능은 어떻게 작동하나요?

문서에도 불구하고 복사 기능의 작동에는 추가 설명이 필요할 수 있습니다.

내장- 복사 기능

복사 기능은 소스 슬라이스의 요소를 동일한 요소 유형의 대상 슬라이스로 전송합니다. 복사는 문자열에서 바이트 조각으로 바이트를 복사할 수 있다는 점에 유의하세요.

복사 함수의 서명은 다음과 같습니다.

<code class="go">func copy(dst, src []Type) int</code>

여기서:

  • dst는 대상 슬라이스.
  • src는 소스 슬라이스입니다.
  • 반환 값은 복사된 요소의 수입니다.

복사 함수 연산

copy 기본적으로 src에서 dst까지 요소를 최소 len(src) 및 len(dst) 요소까지 복사합니다. 이는 대상 슬라이스가 용량을 초과하지 않고 소스 슬라이스의 모든 요소를 ​​수용할 수 있음을 보장한다는 의미입니다.

다음 코드를 고려하세요.

<code class="go">package main

import "fmt"

func main() {
    src := []int{10, 11, 12, 13, 14}
    dst := []int{0, 1, 2, 3, 4}

    n := copy(dst, src)
    fmt.Println("n =", n, "src =", src, "dst =", dst)
}</code>

출력:

n = 5 src = [10 11 12 13 14] dst = [10 11 12 13 14]

이 예에서는 전체 src 슬라이스가 dst 슬라이스에 복사되어 두 슬라이스 모두 동일한 요소를 갖게 됩니다.

겹치는 슬라이스

복사 기능 겹치는 슬라이스에도 사용할 수 있습니다. 예:

<code class="go">copy(src, src[1:])
fmt.Println("n =", n, "src =", src)</code>

출력:

n = 4 src = [1 2 3 4 4]

이 시나리오에서는 src의 첫 번째 요소가 복사에서 제외되고 나머지 4개 요소는 사실상 한 인덱스 왼쪽으로 이동됩니다. , 첫 번째 요소를 마지막 요소로 덮어씁니다.

특수 사례: 문자열을 바이트 슬라이스로 복사

앞서 언급했듯이 복사를 사용하면 문자열에서 바이트 슬라이스로 바이트를 복사할 수 있습니다. 예는 다음과 같습니다.

<code class="go">str := "Hello, World!"
data := make([]byte, 5)
n = copy(data, str)
fmt.Println("n =", n, "str =", str, "data =", data)</code>

출력:

n = 5 str = Hello, World! data = [72 101 108 108 111]

복사 기능은 문자열의 UTF-8 표현 중 처음 5바이트를 데이터 슬라이스에 복사합니다.

결론

복사 기능은 슬라이스가 겹치는 메모리를 공유하는 경우에도 슬라이스 간에 요소를 전송하는 효율적인 방법을 제공합니다. 다재다능함 덕분에 Go 프로그래밍에서 귀중한 도구가 되었습니다.

위 내용은 Go에서 `copy()` 함수는 어떻게 작동하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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