Nilai kaedah dan kaedah pelaksanaan ungkapan kaedah bagi fungsi Golang
Di Golang, fungsi adalah warga kelas pertama. Ini bermakna fungsi secara sintaksis sama seperti nilai lain dan boleh disimpan dalam pembolehubah, dihantar ke fungsi, dan dikembalikan daripada fungsi. Di samping itu, Golang juga menyediakan kaedah untuk memanjangkan tingkah laku jenis. Kaedah ialah fungsi khas yang wujud pada jenis dan boleh mengakses medan dan kaedah jenis tersebut. Dalam artikel ini, kita akan membincangkan nilai kaedah dan kaedah pelaksanaan ungkapan kaedah bagi fungsi Golang.
Nilai kaedah dan ungkapan kaedah
Mula-mula, mari kita lihat nilai kaedah dan ungkapan kaedah. Nilai kaedah ialah nilai fungsi yang terikat kepada penerima. Ia serupa dengan fungsi biasa, tetapi ia juga mengandungi penerima, yang ditentukan apabila fungsi itu ditakrifkan. Oleh itu, nilai kaedah boleh dihantar dan disimpan seperti fungsi biasa, tetapi ia juga mengekalkan rujukan kepada penerima.
Berikut ialah contoh:
type Rect struct { width, height float64 } func (r Rect) Area() float64 { return r.width * r.height } func main() { r := Rect{3, 4} // 获取 Rect 类型的 Area 方法值 f := r.Area // 调用方法值 fmt.Println(f()) }
Dalam contoh di atas, kami mentakrifkan jenis bernamaRect
dan kaedah bernamaArea
untuknya . Penerima kaedahArea
ini adalah daripada jenisRect
, jadi ia hanya boleh dipanggil pada kejadianRect
. Dalam fungsimain
, kami mencipta contohRect
r
dan mendapatkan nilai kaedahArea
nya, menyimpannya dalam pembolehubah bernamaf
. Memandangkanf
ialah nilai fungsi, kita boleh memanggilnya seperti fungsi biasa, tetapi ia juga mengekalkan rujukan kepada contohr
, jadi ia dihantar secara automatik dalamr
apabila dipanggil.
Serupa dengan nilai kaedah, ungkapan kaedah ialah ungkapan fungsi yang terikat kepada penerima. Ia serupa dengan nilai kaedah, tetapi ia tidak bergantung pada mana-mana contoh dan boleh dipanggil apabila tiada contoh. Ungkapan kaedah menggunakan nama jenis sebagai penerima.
Berikut ialah contoh penggunaan ungkapan kaedah:
type Rect struct { width, height float64 } func (r Rect) Area() float64 { return r.width * r.height } func main() { // 获取 Rect 类型的 Area 方法表达式 f := Rect.Area fmt.Println(f(Rect{3, 4})) }
Dalam contoh di atas, kami menggunakanRect.Area
untuk mendapatkanRect
ungkapan kaedah jenisArea
. Memandangkan ungkapan kaedah tidak bergantung pada mana-mana kejadian, kami boleh terus menghantar tikaRect
dan ia akan digunakan secara automatik sebagai penerima apabila dipanggil.
Cara melaksanakan kaedah
Di Golang, terdapat dua cara untuk melaksanakan kaedah: penerima nilai dan penerima penunjuk. Penerima nilai menghantar nilai sebagai penerima kepada kaedah, dan penerima penunjuk menghantar penunjuk sebagai penerima kepada kaedah. Penerima nilai akan menyalin nilai medan dalam kaedah, manakala penerima penunjuk akan melepasi penunjuk sebagai penerima supaya nilai medan boleh diubah suai secara langsung dalam kaedah.
Berikut ialah contoh penggunaan penerima nilai:
type Rect struct { width, height float64 } func (r Rect) Scale(factor float64) { r.width *= factor r.height *= factor } func main() { r := Rect{3, 4} r.Scale(2) fmt.Println(r.width, r.height) }
Dalam contoh di atas, kami telah mentakrifkan kaedah penerima nilai bernamaScale
. Ia mengambil apunganfactor
dan mendarabkan lebar dan tinggiRect
dengannya. Apabila kaedah dipanggil, terima kasih kepada penggunaan penerima nilai, nilai contohr
disalin ke dalam kaedah dan diubah suai. Jadi walaupun lebar dan ketinggian diubah suai dalam kaedah, kami masih mempunyai akses kepada nilai asal di luar fungsi.
Berikut ialah contoh menggunakan penerima penunjuk:
type Rect struct { width, height float64 } func (r *Rect) Scale(factor float64) { r.width *= factor r.height *= factor } func main() { r := &Rect{3, 4} r.Scale(2) fmt.Println(r.width, r.height) }
Dalam contoh di atas, kami telah mentakrifkan kaedah penerima penunjuk bernamaScale
. Ia memerlukan apunganfactor
dan mendarabkan lebar dan tinggiRect
dengannya. Apabila memanggil kaedah, terima kasih kepada penggunaan penerima penunjuk, penunjuk kepada contohr
dihantar ke kaedah dan medannya boleh diubah suai secara langsung. Oleh itu, nilai yang diubah suai juga boleh diakses di luar fungsi.
Kesimpulan
Nilai kaedah dan ungkapan kaedah fungsi Golang sangat berguna, dan ia boleh meningkatkan kebolehbacaan dan kebolehgunaan semula kod. Selain itu, apabila melaksanakan kaedah, kita perlu memilih antara menggunakan penerima nilai atau penerima penunjuk, bergantung pada spesifik kod. Di atas adalah pengenalan kepada nilai kaedah dan kaedah pelaksanaan ungkapan kaedah fungsi Golang saya harap ia akan membantu kerja pembangunan anda.
Atas ialah kandungan terperinci Nilai kaedah fungsi Golang dan kaedah pelaksanaan ungkapan kaedah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!