Go에서 배열 처리
Go에서 배열은 참조가 아니라 값입니다. 따라서 한 배열을 다른 배열에 할당하면 모든 요소가 복사됩니다. 또한 함수에 배열을 전달하면 포인터가 아닌 복사본이 제공됩니다.
예제 코드 설명
다음 코드 예를 고려하세요.
package main import ( "fmt" "rand" "time" ) func shuffle(arr []int) { rand.Seed(time.Nanoseconds()) for i := len(arr) - 1; i > 0; i-- { j := rand.Intn(i) arr[i], arr[j] = arr[j], arr[i] } } func main() { arr := []int{1, 2, 3, 4, 5} arr2 := arr shuffle(arr) for _, i := range arr2 { fmt.Printf("%d ", i) } }
이 코드에서 shuffle 함수는 배열을 입력으로 사용하고 해당 요소를 섞습니다. 그러나 shuffle을 호출하기 전에 원래 배열을 새 변수 arr2에 할당하더라도 함수 내의 arr에 대한 변경 사항은 arr2에 반영됩니다.
슬라이스 대 배열
Go는 슬라이스와 배열을 구별합니다. 배열은 고정 길이 값 목록인 반면, 슬라이스는 기본 배열에 대한 참조입니다. 코드 예제에서 arr과 arr2는 모두 동일한 기본 배열을 참조합니다. 결과적으로 arr에 대한 모든 수정 사항은 arr2에도 적용됩니다. 배열의 고유한 복사본을 생성하려면 make를 사용하여 슬라이스를 할당해야 합니다.
arr := []int{1, 2, 3, 4, 5} arr2 := make([]int, len(arr)) copy(arr2, arr)
이 업데이트된 버전에서 arr2는 더 이상 원본 배열에 대한 참조가 아니므로 arr에 대한 수정 사항은 영향을 미치지 않습니다. arr2.
위 내용은 Go에서 함수 내부의 배열을 수정하면 함수 외부의 동일한 배열에 할당된 변수도 변경되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!