Rumah > pembangunan bahagian belakang > Golang > Mengapa Saya Tidak Boleh Menghubungi Kaedah Penerima Penunjuk pada Kemasukan Peta Go?

Mengapa Saya Tidak Boleh Menghubungi Kaedah Penerima Penunjuk pada Kemasukan Peta Go?

Susan Sarandon
Lepaskan: 2024-12-30 01:15:10
asal
487 orang telah melayarinya

Why Can't I Call a Pointer Receiver Method on a Go Map Entry?

Menujuk Indeks Peta di Golang

Apabila bekerja dengan peta di Golang, adalah penting untuk memahami batasan rujukan entri peta. Dalam senario pengaturcaraan baru-baru ini, timbul persoalan mengenai ralat: "tidak boleh memanggil kaedah penunjuk pada f[0]".

Untuk menjelaskan isu ini, mari kita periksa kod berikut:

package main

import (
    "fmt"

    "inventory"
)

func main() {
    x := inventory.Cashier{}
    x.AddItem("item1", 13)
    f := x.GetItems()

    fmt.Println(f[0].GetAmount())
}
Salin selepas log masuk

Masalahnya terletak pada jenis peta dan kaedah yang dipanggil. Dalam fail Driver.go, kaedah GetItems dipanggil pada struct Cashier, yang mengembalikan salinan peta item. Walau bagaimanapun, kaedah GetAmount ialah kaedah penerima penunjuk, yang memerlukan struct sebenar untuk digunakan.

Dalam Go, entri peta tidak boleh ditangani secara langsung kerana alamatnya mungkin berubah apabila peta berkembang atau mengecut. Akibatnya, anda tidak boleh memanggil kaedah penerima penuding pada entri peta.

Untuk menyelesaikan isu ini, anda boleh mengubah suai kaedah GetItems untuk mengembalikan penuding ke peta sebaliknya:

func (c *Cashier) GetItems() *map[int]item {
    return &c.items
}
Salin selepas log masuk

Oleh berbuat demikian, anda memastikan bahawa kaedah GetAmount boleh dipanggil terus pada entri peta. Berikut ialah fungsi utama yang diperbetulkan:

func main() {
    x := inventory.Cashier{}
    x.AddItem("item1", 13)
    f := x.GetItems()
    fmt.Println((*f)[0].GetAmount())
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menghubungi Kaedah Penerima Penunjuk pada Kemasukan Peta 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