>백엔드 개발 >Golang >Go에서 지도 요소의 주소를 가져올 수 없는 이유는 무엇입니까?

Go에서 지도 요소의 주소를 가져올 수 없는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-14 08:03:12332검색

Why Can't I Take the Address of a Map Element in Go?

왜 "맵 요소의 주소를 가져올 수 없습니까?"

다음 코드 조각을 고려하세요.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.