Rumah > Artikel > pembangunan bahagian belakang > Hubungan halus antara alamat fungsi Golang dan penunjuk
Alamat fungsi menghala ke alamat memori fungsi itu sendiri, manakala penuding menghala ke alamat memori pembolehubah atau struktur. Walau bagaimanapun, alamat fungsi juga boleh disimpan dalam penunjuk, membolehkan kami memanggil fungsi melalui penunjuk. Konsep ini berguna dalam pelbagai senario, seperti memanggil fungsi secara dinamik atau mencipta fungsi panggil balik.
Alamat dan penuding fungsi dalam Go: perhubungan halus
Dalam bahasa Go, alamat fungsi dan penuding nampaknya serupa, tetapi terdapat perbezaan yang ketara antara keduanya. Memahami perbezaan mereka adalah penting untuk menulis kod yang cekap dan boleh diselenggara.
Alamat fungsi
Alamat fungsi ialah alamat yang menunjuk ke lokasi memori fungsi itu sendiri. Ia boleh diperolehi melalui literal func
yang dijana pengkompil atau fungsi ValueOf
atau Func
dalam pakej reflect
. func
字面字或 reflect
包中的 ValueOf
或 Func
函数获取。
指针
指针是一个存储另一个值地址的变量。在Go中,指针可以通过 *
符号和类型名称声明。例如,*int
是一个指向整数值的指针。
它们之间的关系
函数地址和指针指向不同的东西。函数地址指向函数本身的内存地址,而指针指向变量或结构的内存地址。但是,函数地址也可以存储在指针中。
在以下示例中:
func myFunc() {} var fptr = &myFunc
fptr
是一个指针,指向函数 myFunc
Penunjuk
Penunjuk ialah pembolehubah yang menyimpan alamat nilai lain. Dalam Go, penunjuk boleh diisytiharkan melalui simbol*
dan nama jenis. Contohnya, *int
ialah penunjuk kepada nilai integer.
Hubungan antara mereka
🎜🎜Alamat fungsi dan penunjuk menunjuk kepada perkara yang berbeza. Alamat fungsi menunjuk ke alamat memori fungsi itu sendiri, manakala penunjuk menunjuk ke alamat memori pembolehubah atau struktur. Walau bagaimanapun, alamat fungsi juga boleh disimpan dalam penunjuk. 🎜🎜Dalam contoh berikut: 🎜(*fptr)() // 等同于 myFunc()🎜
fptr
ialah penunjuk yang menunjuk ke alamat fungsi myFunc
. Ini membolehkan kami memanggil fungsi melalui penunjuk: 🎜package main import ( "fmt" "math" ) // 计算半径的函数 func radius(n int) float64 { return float64(n) / 2.0 } // 求一个数字的根的函数 func sqrt(n int) float64 { return math.Sqrt(float64(n)) } var operations = map[string]func(int) float64{ "radius": radius, "sqrt": sqrt, } func main() { input := "sqrt" num := 9 // 通过名称获取函数指针 op := operations[input] // 调用函数并打印结果 fmt.Println(op(num)) }🎜🎜Contoh Praktikal🎜🎜🎜Alamat dan penunjuk fungsi berguna dalam pelbagai senario. Berikut ialah contoh praktikal yang menggunakan konsep ini: 🎜rrreee🎜 Contoh ini menunjukkan cara menyimpan alamat fungsi dalam kamus dan memanggilnya secara dinamik mengikut nama fungsi semasa masa jalan. 🎜
Atas ialah kandungan terperinci Hubungan halus antara alamat fungsi Golang dan penunjuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!