Rumah >pembangunan bahagian belakang >Golang >Mengapakah Saya Tidak Boleh Menggunakan Penerima Penunjuk pada Entri Peta dalam Go?

Mengapakah Saya Tidak Boleh Menggunakan Penerima Penunjuk pada Entri Peta dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-12-21 02:00:14226semak imbas

Why Can't I Use Pointer Receivers on Map Entries in Go?

Membatalkan Indeks Peta dalam Go

Dalam program Go, indeks peta tidak boleh dirujuk secara langsung. Isu ini timbul disebabkan sifat dinamik peta, di mana alamat entri mungkin berubah semasa pertumbuhan atau pengecutan peta. Akibatnya, cubaan memanggil kaedah penerima penuding pada entri peta membawa kepada ralat berikut:

cannot call pointer method on f[0]
cannot take the address of f[0]

Untuk menyelesaikan isu ini, cuma alih keluar tanda bintang (*) daripada penerima kaedah dalam kaedah bermasalah:

func (c Cashier) Buy(itemNum int){
    item, pass := c.items[itemNum]

    if pass{
        if item.amount == 1{
            delete(c.items, itemNum)
        } else{
            item.amount--
            c.items[itemNum] = item 
        }
        c.cash++
    }
}

Dengan berbuat demikian, kaedah ini bukan lagi penerima penunjuk, membenarkan ia dipanggil pada entri peta tanpa isu.

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Menggunakan Penerima Penunjuk pada Entri Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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