Mengapa saya tidak boleh mendapatkan alamat fungsi dalam golang, tetapi saya boleh mendapatkan nilai fungsi

WBOY
Lepaskan: 2024-02-10 19:30:20
ke hadapan
749 orang telah melayarinya

为什么我不能获取 golang 中函数的地址,但可以获取函数值

Editor PHP Zimo akan menjawab untuk anda: Mengapa saya tidak boleh mendapatkan alamat fungsi dalam golang, tetapi bolehkah saya mendapatkan nilai fungsi? Di Golang, nilai fungsi boleh diperolehi kerana nilai fungsi adalah jenis yang boleh dipanggil. Alamat fungsi tidak boleh diperolehi, yang ditentukan oleh keputusan reka bentuk Golang. Fungsi di Golang adalah warganegara kelas pertama dan boleh ditugaskan, diluluskan dan dipanggil seperti jenis lain. Oleh itu, nilai fungsi boleh diperoleh dan dihantar ke fungsi lain. Walau bagaimanapun, pelaksanaan fungsi Golang dilaksanakan melalui penutupan Setiap kali fungsi dicipta, contoh penutupan baharu dijana, jadi alamat fungsi tidak tetap dan tidak boleh diperolehi. Reka bentuk sedemikian boleh memastikan kebebasan dan keselamatan fungsi, sambil memudahkan proses pengurusan memori dan pengumpulan sampah. Jadi, walaupun anda tidak boleh mendapatkan alamat fungsi, anda boleh mendapatkan nilai fungsi dan memanggilnya.

Kandungan soalan

Andaikan saya mengisytiharkan fungsi dalam golang:

func myfunc() {     
    }
Salin selepas log masuk

Ralat untuk mengisytiharkan penunjuk fungsi menggunakan alamat fungsi

fp := &myfunc
Salin selepas log masuk

"Operasi tidak sah: Tidak dapat mendapatkan alamat myfunc (nilai jenis func())"

Namun, saya boleh menetapkannya kepada nilai fungsi dan mendapatkan alamatnya

functionValue := myFunc
fp := &function
Salin selepas log masuk

Adakah "nilai fungsi" berbeza daripada menggunakan nama fungsi "myfunc"? Bukankah mereka berdua mempunyai jenis yang sama? (Fungsi())

Penyelesaian

myfunc 是一个函数。 functionvalue ialah pembolehubah fungsi, iaitu pembolehubah yang menunjuk ke fungsi dan juga penutupan. Contohnya:

var x int
functionValue:=func() int {return x}
Salin selepas log masuk

Di atas, petikan daripada functionvalue 是一个函数变量,其闭包包含对 x.

Apabila

kelihatan seperti myfunc 这样的命名函数没有与之关联的闭包。像 functionvalue 这样的函数变量有一个闭包。当您将其分配给 myfunc, penutupan adalah kosong. Apabila anda memperuntukkannya seperti di atas, ia bukan nol. Oleh itu, mekanisme memanggil fungsi adalah berbeza daripada memanggil pembolehubah fungsi.

Alamat pembolehubah fungsi ialah alamat pembolehubah.

Atas ialah kandungan terperinci Mengapa saya tidak boleh mendapatkan alamat fungsi dalam golang, tetapi saya boleh mendapatkan nilai fungsi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:stackoverflow.com
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!