Rumah >pembangunan bahagian belakang >Golang >Mengapa saya tidak boleh mendapatkan alamat fungsi dalam golang, tetapi saya boleh mendapatkan nilai fungsi

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

WBOY
WBOYke hadapan
2024-02-10 19:30:20814semak imbas

为什么我不能获取 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() {     
    }

Ralat untuk mengisytiharkan penunjuk fungsi menggunakan alamat fungsi

fp := &myfunc

"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

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}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam