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

Jun 04, 2024 am 10:31 AM
go fungsi map

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) // 输出:{}
}
Salin selepas log masuk

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

如示例所示,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
}
Salin selepas log masuk
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 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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menghantar mesej Go WebSocket? Bagaimana untuk menghantar mesej Go WebSocket? Jun 03, 2024 pm 04:53 PM

Bagaimana untuk menghantar mesej Go WebSocket?

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang? Jun 04, 2024 pm 12:27 PM

Bagaimana untuk mengelakkan kebocoran memori dalam pengoptimuman prestasi teknikal Golang?

Koleksi lengkap formula fungsi excel Koleksi lengkap formula fungsi excel May 07, 2024 pm 12:04 PM

Koleksi lengkap formula fungsi excel

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go? Jun 02, 2024 am 09:00 AM

Bagaimana untuk memadankan cap masa menggunakan ungkapan biasa dalam Go?

Perbezaan antara bahasa Golang dan Go Perbezaan antara bahasa Golang dan Go May 31, 2024 pm 08:10 PM

Perbezaan antara bahasa Golang dan Go

Amalan terbaik dokumentasi rangka kerja Golang Amalan terbaik dokumentasi rangka kerja Golang Jun 04, 2024 pm 05:00 PM

Amalan terbaik dokumentasi rangka kerja Golang

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Panduan untuk menguji unit fungsi serentak Go

Bagaimana untuk mencipta Goroutine yang diutamakan dalam Go? Bagaimana untuk mencipta Goroutine yang diutamakan dalam Go? Jun 04, 2024 pm 12:41 PM

Bagaimana untuk mencipta Goroutine yang diutamakan dalam Go?

See all articles