Mengapa Saya Mendapat 'Operasi Tidak Sah - Taip *map[key]value Does Not Support Indexing' dalam Go?

Susan Sarandon
Lepaskan: 2024-11-14 11:08:02
asal
300 orang telah melayarinya

Why Do I Get

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))
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan