왜 "맵 요소의 주소를 가져올 수 없습니까?"
다음 코드 조각을 고려하세요.
odsMap := map[string]XMLElement{ "key": {Value: "value"}, } segRef := "key"
다음 문은 작동합니다.
x := odsMap[segRef] x.GetValue("@OriginDestinationKey")
그러나 이 문은 다음 오류로 인해 실패합니다.
cannot call pointer method on odsMap[segRef] cannot take the address of odsMap[segRef]
이러한 오류는 지도 색인 표현식을 주소 지정할 수 없기 때문에 발생합니다. 새로운 항목이 추가되면 맵의 내부 구조가 변경되어 해당 주소를 가져갈 수 없게 될 수 있습니다.
따라서 맵에 저장된 비포인터 값에 대해 포인터 수신기를 사용하여 메서드에 액세스할 때 작업 예제에서 볼 수 있듯이 해당 값의 주소를 가져오려면 중간 변수가 필요합니다.
이 문제를 방지하려면 대신 포인터 값을 맵에 저장하는 것이 좋습니다. 예를 들어:
type My int func (m *My) Str() string { return strconv.Itoa(int(*m)) } odsMap := map[string]*My{} my := My(12) odsMap[segRef] = &my
또는 포인터가 아닌 값을 지역 변수에 할당하고 해당 주소를 가져올 수 있습니다.
x := odsMap[segRef] x.GetValue("@OriginDestinationKey") // Method call on *XMLElement
결론적으로 지도 인덱스 표현식은 주소를 지정할 수 없습니다. 맵의 포인터가 아닌 값에 대한 포인터 메서드에 액세스할 때 중간 변수 또는 대체 저장 전략을 사용해야 합니다.
위 내용은 Go에서 지도 요소의 주소를 가져올 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!