Rumah > pembangunan bahagian belakang > Golang > Penutupan lwn Parameter dalam Go: Bila Menggunakan Mana untuk Fungsi Tanpa Nama?

Penutupan lwn Parameter dalam Go: Bila Menggunakan Mana untuk Fungsi Tanpa Nama?

DDD
Lepaskan: 2024-11-30 05:47:14
asal
695 orang telah melayarinya

Closures vs Parameters in Go: When to Use Which for Anonymous Functions?

Parameter vs Penutupan: Menyelidiki Nuansa

Dalam Go, penutupan dan parameter fungsi menyediakan mekanisme yang berbeza untuk mengendalikan pembolehubah dalam fungsi tanpa nama. Mari kita mendalami nuansa dan meneroka apabila satu pendekatan lebih unggul daripada pendekatan yang lain.

Penutupan: Akses Pembolehubah Dikongsi

Apabila fungsi tanpa nama bertindak sebagai penutup, ia mengekalkan akses kepada pembolehubah yang ditakrifkan dalam skop sekeliling. Pembolehubah ini dikongsi antara semua keadaan penutupan, bermakna ia merujuk kepada alamat memori yang sama. Ini boleh berfaedah apabila anda mahu berbilang panggilan fungsi beroperasi pada data yang sama, seperti mengekalkan jumlah berjalan atau menambah pembilang.

Parameter Fungsi: Menyalin Nilai

Sebaliknya, apabila anda lulus parameter kepada fungsi tanpa nama, fungsi menerima salinan nilai. Ini bermakna bahawa setiap contoh fungsi mempunyai salinan pembolehubah tersendiri, diasingkan daripada skop panggilan. Ini berfaedah apabila anda mahu setiap panggilan fungsi beroperasi secara bebas, tanpa menjejaskan nilai asal.

Memilih Pendekatan yang Tepat

Pilihan antara menggunakan penutupan atau parameter fungsi bergantung pada tingkah laku yang dimaksudkan . Jika anda memerlukan semua panggilan fungsi untuk berkongsi pembolehubah yang sama dan pengubahsuaiannya, penutupan adalah lebih sesuai. Sebaliknya, jika setiap panggilan fungsi harus beroperasi pada salinan pembolehubahnya sendiri, parameter harus digunakan.

Untuk menggambarkan perbezaan ini, pertimbangkan perkara berikut contoh:

Penutupan:

for i := 0; i < 3; i++ {
    go func() {
        fmt.Println(i)
    }()
}
Salin selepas log masuk

Parameter:

for i := 0; i < 3; i++ {
    go func(v int) {
        fmt.Println(v)
    }(i)
}
Salin selepas log masuk

Dalam contoh penutupan, semua fungsi panggilan akan mengakses pembolehubah kongsi yang sama i, yang mempunyai nilai akhir 3 apabila goroutine dilaksanakan. Ini menyebabkan output 3 dicetak tiga kali.

Dalam contoh parameter fungsi, bagaimanapun, setiap panggilan fungsi menerima salinan pembolehubah i pada masa panggilan. Oleh itu, output ialah 0, 1 dan 2, kerana setiap goroutine mencetak nilai i pada masa ia diluluskan sebagai hujah.

Atas ialah kandungan terperinci Penutupan lwn Parameter dalam Go: Bila Menggunakan Mana untuk Fungsi Tanpa Nama?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan