"맵의 구조체 필드에 할당할 수 없음" 오류 해결
Go에서 맵 내의 중첩된 구조체 필드를 수정하려고 할 때 , "맵의 구조체 필드에 할당할 수 없습니다."라는 오류가 발생할 수 있습니다. 이 오류는 먼저 맵 값의 복사본을 만들지 않고 맵의 구조체 필드에 값을 직접 할당하려고 시도한 결과 발생합니다. 문제는 맵에 값 자체가 아닌 값에 대한 참조가 포함되어 있기 때문에 발생합니다.
주어진 예에서 볼 수 있듯이 새 Users 값을 직접 추가하려고 하면 오류가 발생합니다.
snapshots["test"].Users = append(snapshots["test"].Users, user)
이 문제를 해결하려면 지도 값의 복사본을 수정한 다음 지도에 다시 할당해야 합니다. 이는 다음 단계를 사용하여 달성할 수 있습니다.
tmp := snapshots["test"].Users tmp = append(tmp, user) snapshots["test"].Users = tmp
그러나 이 접근 방식은 특히 복잡하거나 깊게 중첩된 구조의 경우 항상 실행 가능한 것은 아닙니다. Go 이슈 트래커에서 제안된 권장 해결 방법은 컨텍스트 패키지를 사용하는 것입니다.
컨텍스트에서 맵을 래핑하면 "맵의 구조체 필드에 할당할 수 없습니다"라는 메시지가 발생하지 않고 구조체 필드를 쉽게 수정할 수 있습니다. " 오류:
import ( "context" "fmt" ) func main() { ctx := context.TODO() snapshots := make(map[string] Snapshot, 1) snapshots["test"] = Snapshot { Key: "testVal", Users: make([]Users, 0), } user := Users{} // Create a new context with the updated value ctx, _ = context.WithValues(ctx, "snapshot", snapshots) // Retrieve the modified map from the context snapshots = ctx.Value("snapshot").(map[string]Snapshot) // Append to the Users slice safely snapshots["test"].Users = append(snapshots["test"].Users, user) fmt.Println(snapshots) }
이 향상된 접근 방식에서는 지도 스냅샷이 컨텍스트에 래핑되어 원본에 영향을 주지 않고 수정할 수 있는 샌드박스 환경을 제공합니다. map.
권장 해결 방법이나 컨텍스트 패키지를 사용하여 "맵의 구조체 필드에 할당할 수 없습니다" 오류를 해결하면 Go 코드가 맵과 중첩된 구조체를 정확하고 효율적으로 조작하도록 할 수 있습니다.
위 내용은 Go에서 '맵의 구조체 필드에 할당할 수 없습니다' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!