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