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

Go Range 루프 내에서 직접 구조체 값을 수정할 수 없는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-26 19:01:09
원래의
646명이 탐색했습니다.

Why Can't I Modify Struct Values Directly Within a Go Range Loop?

Go의 범위 변수 이해

Q: 유형 구조 범위 내에서 값을 수정할 수 없는 이유는 무엇입니까?

Go에서는 슬라이스와 범위의 개념이 초보자에게 혼란스러울 수 있습니다. 범위 문은 컬렉션의 요소를 반복하여 반복 변수에 할당합니다. 그러나 구조의 경우 이러한 변수를 수정해도 원래 값은 수정되지 않습니다.

A: 반복 변수 할당

Go 프로그래밍 언어 사양에는 다음과 같이 명시되어 있습니다. range 절이 있는 문에서는 반복 변수에 컬렉션의 각 요소 값이 할당됩니다. 그러나 이러한 변수는 루프 본문에만 로컬입니다.

반복 변수 수정

루프 내에서 반복 변수를 수정하면 실제로 원본이 수정되지 않습니다. 컬렉션의 가치. 대신 값의 새 복사본을 생성하여 반복 변수에 할당합니다.

해결책: 수정된 값 할당

컬렉션의 원래 값을 수정하려면 , 수정된 반복 변수를 원래 컬렉션에 다시 할당해야 합니다. 예제 코드에서 elem.Count에 대한 수정된 반복 변수는 ChartRecords[i]에 다시 할당되어야 합니다.

업데이트된 코드

다음은 업데이트된 코드입니다. 필요한 수정:

for i, elem := range chartRecords {
    elem.Count = modMe(mod, i)
    chartRecords[i] = elem
    fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name)
}
로그인 후 복사

이 수정은 수정된 elem.Count 값이 차트레코드 조각.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿