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.
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())
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
.
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!