Rumah >pembangunan bahagian belakang >Golang >Perkara yang perlu diambil perhatian apabila fungsi Golang menerima parameter peta

Perkara yang perlu diambil perhatian apabila fungsi Golang menerima parameter peta

WBOY
WBOYasal
2024-06-04 10:31:14423semak imbas

Apabila menghantar peta ke fungsi dalam Go, salinan akan dibuat secara lalai dan pengubahsuaian pada salinan tidak akan menjejaskan peta asal. Jika anda perlu mengubah suai peta asal, anda boleh menghantarnya melalui penuding. Peta kosong perlu dikendalikan dengan berhati-hati kerana ia secara teknikal adalah penunjuk sifar dan menghantar peta kosong kepada fungsi yang menjangkakan peta tidak kosong akan menyebabkan ralat.

Golang 函数接收 map 参数时的注意事项

Perkara yang perlu diberi perhatian apabila fungsi Go menerima parameter peta

Dalam Go, apabila menghantar peta kepada fungsi sebagai parameter, terdapat beberapa langkah berjaga-jaga jika tidak diberi perhatian, ia mungkin membawa kepada hasil yang tidak dijangka.

Copy Passing

Apabila menghantar peta ke fungsi, salinan dibuat secara lalai. Dalam erti kata lain, peta dalam fungsi ialah salinan peta parameter, dan sebarang pengubahsuaian pada salinan tidak akan menjejaskan peta asal.

Kes praktikal 1:

func modifyMap(m map[string]int) {
    m["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(m)
    fmt.Println(m) // 输出:{}
}

Seperti yang ditunjukkan dalam contoh, pengubahsuaian yang dibuat pada peta oleh fungsi modifyMap tidak akan menjejaskan peta asal. modifyMap 函数对 map 做出的修改不会影响原始 map。

避免副本传递

如果需要修改原始 map,可以使用指针来传递。当传递指针时,函数内的 map 指向原始 map 的内存地址。

实战案例 2:

func modifyMap(m *map[string]int) {
    (*m)["key"] = 100
}

func main() {
    m := make(map[string]int)
    modifyMap(&m)
    fmt.Println(m) // 输出:{key: 100}
}

如示例所示,modifyMap

Elakkan salinan lulus

Jika anda perlu mengubah suai peta asal, anda boleh menggunakan penunjuk untuk melepasinya. Apabila melewati penunjuk, peta dalam fungsi menghala ke alamat memori peta asal.

Kes Praktikal 2:

func printMap(m map[string]int) {
    for k, v := range m {
        fmt.Println(k, v)
    }
}

func main() {
    var m map[string]int // 空 map
    printMap(m) // 运行时错误:panic: runtime error: invalid memory address or nil pointer dereference
}

Seperti yang ditunjukkan dalam contoh, pengubahsuaian yang dibuat pada peta oleh fungsi modifyMap akan menjejaskan peta asal.

Peta kosong

Berhati-hati apabila menghantar peta kosong ke fungsi. Peta kosong secara teknikalnya adalah penunjuk sifar, bukan peta yang sah. Oleh itu, jika fungsi menjangkakan peta bukan kosong, ralat mungkin berlaku apabila menghantar peta kosong.
  • Kes praktikal 3:
  • rrreee
  • Seperti yang ditunjukkan dalam contoh, menghantar peta kosong ke fungsi akan menyebabkan ralat masa jalan. Untuk menyelesaikan masalah ini, anda boleh melakukan semakan bukan nol pada peta atau memberikan nilai lalai.
🎜Kesimpulan: 🎜🎜🎜🎜Apabila menghantar peta ke fungsi, salinan dibuat secara lalai. 🎜🎜Untuk mengubah suai peta asal, anda boleh menghantarnya menggunakan penuding. 🎜🎜Berhati-hati dengan peta kosong. 🎜🎜

Atas ialah kandungan terperinci Perkara yang perlu diambil perhatian apabila fungsi Golang menerima parameter peta. 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