맵 값 처리
Go에서는 다음 예와 같이 맵 값 내에서 직접 구조체 필드를 수정하려고 시도하면 컴파일 오류가 발생합니다.
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are of the "pair" type. dictionary := make(map[string]pair) // Add an element to the map. dictionary["xxoo"] = pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: {5 2} // Attempt to modify a field within the map value. dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b }
이 오류 메시지는 맵 값을 주소 지정할 수 없기 때문에 발생합니다. 주소 지정 가능성은 Go의 기본 개념으로, 변수의 메모리 주소를 찾는 기능을 나타냅니다. 주소를 지정할 수 없는 값의 구조체 필드에 액세스하려고 하면 컴파일 오류가 발생하므로 주소를 지정할 수 없는 값을 간접적으로 수정할 수 없습니다.
이 문제를 해결하려면 다음 두 가지 주요 접근 방식이 있습니다.
포인터 값 사용
한 가지 접근 방식은 포인터 값을 맵 값으로 사용하는 것입니다. 이러한 간접 참조는 값을 주소 지정 가능하게 만들어 필드 수정을 허용합니다. 예는 다음과 같습니다.
import ( "fmt" ) type pair struct { a float64 b float64 } func main() { // Create a map where values are pointers to "pair" structs. dictionary := make(map[string]*pair) // Add an element to the map. dictionary["xxoo"] = &pair{5.0, 2.0} fmt.Println(dictionary["xxoo"]) // Output: &{5 2} // Modify a field within the pointed-to struct. dictionary["xxoo"].b = 5.0 fmt.Println(dictionary["xxoo"].b) // Output: 5 }
값 복사 또는 대체
또는 값을 복사하거나 완전히 대체하여 주소 지정이 불가능한 값으로 작업할 수 있습니다. 다음은 두 가지 예입니다.
// Value Copying dictionary["xxoo"] = pair{5.0, 5.0}
// Value Replacement p := dictionary["xxoo"] p.b = 5.0 dictionary["xxoo"] = p
이 두 접근 방식 모두 지도 내에서 "쌍" 구조체를 수정할 수 있습니다.
위 내용은 Go 맵 값 내에서 구조체 필드를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!