Go: Operasi Tidak Sah - Taip *map[key]value Tidak Menyokong Pengindeksan
Dalam Go, cuba menghantar peta dengan penuding dan mengubah suai peta asal melalui penuding boleh mengakibatkan ralat "operasi tidak sah". Ini kerana pengindeksan pada penuding ke peta tidak disokong dalam Go.
Untuk menyelesaikan isu ini, adalah perlu untuk mengindeks pada peta itu sendiri dan bukannya penuding. Berikut ialah kod yang diubah suai yang menunjukkan cara untuk melakukan ini:
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)) }
Dengan menyahrujuk penuding ke peta (*b) sebelum mengindeks, kod kini mengubah suai peta asal dengan betul.
Nota: Walaupun kod di atas menunjukkan cara mengubah suai peta melalui penunjuk, secara amnya adalah lebih idiomatik untuk lulus peta mengikut nilai dalam Go. Dengan menghantar nilai, perubahan yang dibuat pada peta secara automatik disebarkan kembali ke peta asal.
Atas ialah kandungan terperinci Mengapa Saya Mendapat 'Operasi Tidak Sah - Taip *map[key]value Does Not Support Indexing' dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!