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 중국어 웹사이트의 기타 관련 기사를 참조하세요!