슬라이스의 추가() 동작 이해
초기 슬라이스를 포인터로 가정했음에도 불구하고 제공된 코드는 추가가 () 작업은 원본 슬라이스에 직접적인 영향을 미치지 않습니다. Go에서는 슬라이스를 포함한 모든 것이 값으로 전달되기 때문입니다. 따라서 슬라이스를 함수에 전달하거나 새 변수에 할당하면 슬라이스 헤더의 복사본만 전달하는 것입니다.
슬라이스 헤더에는 슬라이스 길이, 용량, 그리고 기본 배열에 대한 포인터입니다. 슬라이스에서 추가() 작업이 수행되면 필요한 경우 새 요소를 수용하기 위해 새 배열이 할당됩니다. 그런 다음 슬라이스 헤더가 새 배열을 가리키도록 업데이트되고 새 요소가 복사됩니다. 이 새로운 슬라이스 헤더는 Append() 호출의 결과로 반환됩니다.
예제 코드에서는 Append() 작업의 반환 값을 Slice1 변수에 할당합니다. 이는 이제 슬라이스1이 슬라이스와 다른 배열을 가리킨다는 의미입니다. Slice1의 요소에 대한 변경 사항은 슬라이스에 반영되지 않으며 그 반대의 경우도 마찬가지입니다.
slice와 Slice1이 모두 동일한 배열을 참조하는 동작을 달성하려면 슬라이스에 대한 포인터를 사용해야 합니다. 슬라이스 자체 대신. 예를 들면 다음과 같습니다.
func main() { slice := make([]int, 10, 10) slice[0] = 0 slice[1] = 1 slicePtr := &slice slice1 := *slicePtr slice1[0] = 10000 fmt.Println(slice) *slicePtr = append(*slicePtr, 100) (*slicePtr)[0] = 20000 fmt.Println(slice) }
이 예에서는 슬라이스와 슬라이스1이 모두 동일한 기본 배열을 가리키므로 한 쪽의 변경 사항이 다른 쪽에도 표시됩니다.
위 내용은 Append()가 Go의 슬라이스에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!