Go에서 '잘못된 작업 - 유형 *map[key]값이 인덱싱을 지원하지 않습니다.'라는 메시지가 나타나는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-11-14 11:08:02
원래의
302명이 탐색했습니다.

Why Do I Get

Go: 잘못된 연산 - *map[key]값을 입력하면 인덱싱이 지원되지 않습니다.

Go에서는 포인터로 지도를 전달하려고 합니다. 포인터를 통해 원본 지도를 수정하면 "잘못된 작업" 오류가 발생할 수 있습니다. Go에서는 지도를 가리키는 포인터에 대한 인덱싱이 지원되지 않기 때문입니다.

이 문제를 해결하려면 포인터가 아닌 지도 자체에 대한 인덱싱이 필요합니다. 다음은 이 작업을 수행하는 방법을 보여주는 수정된 코드입니다.

package main

import "fmt"

type Currency string

type Amount struct {
    Currency Currency
    Value float32
}

type Balance map[Currency]float32

func (b *Balance) Add(amount Amount) *Balance {
    current, ok := (*b)[amount.Currency]
    if ok {
        (*b)[amount.Currency] = current + amount.Value
    } else {
        (*b)[amount.Currency] = amount.Value
    }
    return b
}

func main() {
    b := &Balance{Currency("USD"): 100.0}
    b = b.Add(Amount{Currency: Currency("USD"), Value: 5.0})

    fmt.Println("Balance: ", (*b))
}
로그인 후 복사

인덱싱 전에 지도(*b)에 대한 포인터를 역참조함으로써 코드는 이제 원본 지도를 올바르게 수정합니다.

참고: 위 코드는 포인터를 통해 지도를 수정하는 방법을 보여주지만 일반적으로 Go에서는 값으로 지도를 전달하는 것이 더 관용적입니다. 값을 전달하면 지도에 대한 변경 사항이 자동으로 원본 지도에 다시 전파됩니다.

위 내용은 Go에서 '잘못된 작업 - 유형 *map[key]값이 인덱싱을 지원하지 않습니다.'라는 메시지가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿