>백엔드 개발 >Golang >구조체 슬라이스에 대한 Go Range 루프의 값을 직접 수정할 수 없는 이유는 무엇입니까?

구조체 슬라이스에 대한 Go Range 루프의 값을 직접 수정할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-20 17:21:14263검색

Why Can't I Directly Modify Values in a Go Range Loop Over a Struct Slice?

유형 구조 범위에서 값을 수정하는 것이 왜 불가능한가요?

이 프로그래밍 쿼리는 구조화된 유형 범위 내에서 값을 변경할 수 없기 때문에 발생합니다. Go 프로그래밍 언어. 이 문제를 이해하려면 Go에서 슬라이스와 범위가 어떻게 작동하는지 자세히 조사해야 합니다.

chartRecords 배열에 데이터를 로드하는 초기 방법에도 불구하고 루프에서 값을 수정하면 아무런 효과가 없는 것 같습니다. 출력은 수정된 값을 반영하는 대신 원래 값을 유지합니다.

혼란은 Go가 슬라이스와 범위를 처리하는 방식에서 비롯됩니다. for 문의 range 절의 경우 Go는 해당 반복 변수에 반복 값을 할당하지만 이러한 변경 사항은 블록 내에서만 적용됩니다. 이러한 반복 변수는 원본 슬라이스 요소에 대한 참조가 아니라 복사본입니다.

슬라이스 요소를 영구적으로 변경하려면 반복 변수에서 수정된 값을 슬라이스에 명시적으로 다시 할당해야 합니다. 업데이트된 코드는 다음과 같습니다.

for i, elem := range chartRecords {
    elem.Count = modMe(mod, i)
    chartRecords[i] = elem
}

이 수정된 루프에서는 반복 변수 elem에서 수정된 값이 원래 슬라이스 ChartRecords에 다시 할당되어 변경 사항이 지속되도록 합니다.

위 내용은 구조체 슬라이스에 대한 Go Range 루프의 값을 직접 수정할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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