>백엔드 개발 >Golang >Go의 `append()` 함수는 값이 전달될 때 슬라이스 동작에 어떤 영향을 줍니까?

Go의 `append()` 함수는 값이 전달될 때 슬라이스 동작에 어떤 영향을 줍니까?

DDD
DDD원래의
2024-11-20 15:14:15888검색

How Does Go's `append()` Function Affect Slice Behavior When Passed by Value?

슬라이스의 Append() 동작 이해

Go에서 슬라이스 작업을 할 때, add() 함수가 슬라이스와 상호 작용하는 방식을 이해하는 것이 중요합니다. 값으로 전달된 슬라이스.

다음 코드 조각을 고려하세요.

func main() {
    slice := make([]int, 10, 10)
    slice[0] = 0
    slice[1] = 1

    slice1 := slice
    slice1[0] = 10000
    fmt.Println(slice)

    slice1 = append(slice1, 100)
    slice1[0] = 20000

    fmt.Println(slice)
}

이 예에서는 두 개의 슬라이스(slice 및 Slice1)가 생성되며, 처음에는 Slice1이 Slice와 동일한 배열을 가리킵니다. . 그러나 첫 번째 추가() 호출 이후에는 다른 배열을 가리키는 새 슬라이스 값이 슬라이스1에 할당됩니다. 이 할당으로 인해 Slice1의 동작은 슬라이스와 독립적이 됩니다.

설명:

  • 값으로 전달: Go에서는 모든 것이 전달됩니다. 즉, Slice1은 슬라이스의 슬라이스 헤더 사본을 수신합니다.
  • 용량을 추가: 길이와 용량이 같은 슬라이스에 0개 이상의 요소를 추가하는 경우(다음과 같이) 경우), 새롭고 더 큰 배열이 할당됩니다.
  • 슬라이스 헤더 할당:append() 호출은 새 배열을 가리키는 새 슬라이스 헤더를 반환하며, 이는 Slice1에 할당됩니다.
  • 독립 슬라이스: 할당 후, 슬라이스와 슬라이스1은 서로 다른 슬라이스 헤더를 가리키는 두 개의 개별 변수가 되므로 서로 다른 배열이 됩니다.

결과 :

  • 불변성: 한 슬라이스(예: 슬라이스1)의 요소에 대한 변경 사항은 다른 슬라이스(예: 슬라이스)에 반영되지 않습니다.
  • 메모리 관리: 추가 작업은 메모리 재할당으로 이어질 수 있으며, 새로운 어레이를 생성하고 잠재적으로 성능에 영향을 줄 수 있습니다.

슬라이스 헤더와 그 내부를 이해하려면 다음 리소스를 참조하세요. :

  • [golang 슬라이스는 값으로 전달됩니까?](https://stackoverflow.com/questions/25740338/are-golang-slices-pass-by-value)
  • [Go Slices: 사용법 및 내부](https://blog.golang.org/slices)

위 내용은 Go의 `append()` 함수는 값이 전달될 때 슬라이스 동작에 어떤 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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