>백엔드 개발 >Golang >골랑 슬라이스를 복사하는 방법

골랑 슬라이스를 복사하는 방법

(*-*)浩
(*-*)浩원래의
2019-12-17 11:24:173523검색

골랑 슬라이스를 복사하는 방법

Golang의 슬라이스는 기본 배열을 가리키는 포인터 구조입니다.

이 구조에는 세 가지 속성이 있습니다. 1. 배열에 대한 포인터, 2.len: 슬라이스의 요소 수 3.cap: 슬라이스가 차지하는 메모리 양.

이 세 가지 속성을 깊이 이해해야만 슬라이스를 사용할 때 실수를 피할 수 있습니다. (추천 학습: Go

)

변수의 올바른 이해와 공유

여러 슬라이스가 기본 데이터를 공유할 수 있으며, 배열의 일부가 겹칠 수 있습니다. 이 문장에 대한 깊은 이해는 스케줄 프로그래밍에 있어 매우 의미가 깊습니다.

공유된 데이터는 언제 다른 변수에 의해 수정되나요

func f1()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a1[1] = 999
    
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

실행 결과

a1= [1 999 3 4 5 6] a2= [1 999 3 4 5 6] a3= [999 3]
Process finished with exit code 0

이때 a1이 수정되고 두 변수 모두 수정되는 모습이 확연히 보입니다

언제쯤 될까요? 수정하지 않음

func f2()  {
    a1 := []int{1,2,3,4,5,6}
    a2 := a1
    a3 := a1[1:3]
    a2 = append(a2,888)
    a1[1] = 999
    fmt.Println("a1=",a1,"a2=",a2,"a3=",a3)
}

실행 결과

a1= [1 999 3 4 5 6] a2= [1 2 3 4 5 6 888] a3= [999 3]
Process finished with exit code 0

는 a1이 수정되더라도 수정 가능하지만 a2는 수정되지 않습니다. 우리는 추가 기능이 메모리 재할당에 직면할 것이라는 것을 알고 있습니다. 따라서 a2가 추가되면 메모리 공간을 다시 적용하고 원래 배열을 복사하고 새 값을 추가합니다. 즉, 추가 작업이 발생하면 a2는 더 이상 a1과 메모리를 공유하지 않습니다.

슬라이스를 복사할 때 배열을 가리키는 여러 변수가 동시에 발생하는 경우 데이터 공유 및 메모리 재할당을 고려해야 합니다.

위 내용은 골랑 슬라이스를 복사하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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