Rumah > Artikel > pembangunan bahagian belakang > Perbezaan antara penunjuk struct dan pemindahan nilai struct dalam fungsi Golang
Dalam Go, parameter fungsi boleh dihantar melalui nilai atau penuding. Lulus nilai memberikan salinan, dan pengubahsuaian pada salinan tidak akan menjejaskan nilai asal, hantaran penunjuk melepasi alamat, dan pengubahsuaian pada kandungan akan ditunjukkan dalam nilai asal. Dalam amalan, hantaran penunjuk boleh digunakan untuk mengoptimumkan kod, contohnya semasa mengisih kepingan. Memilih kaedah penghantaran yang betul adalah penting untuk mengoptimumkan kod anda dan meningkatkan prestasi.
Fungsi hantaran parameter dalam Go: hantaran nilai dan hantaran penunjuk
Dalam Go, parameter fungsi boleh dihantar melalui nilai atau hantaran penunjuk. Memahami perbezaan antara dua kaedah penghantaran ini adalah penting untuk menguasai pengaturcaraan Go.
Pass-by-value
Pass-by-value bermaksud fungsi menerima salinan nilai argumen masuk. Sebarang pengubahsuaian kepada nilai parameter tidak akan menjejaskan nilai asal. Contohnya:
func changeValue(s string) { s = "modified" } func main() { var s = "original" changeValue(s) fmt.Println(s) //输出: original }
Dalam fungsi changeValue
, s
ialah salinan jenis string
. Pengubahsuaian kepada s
tidak menjejaskan pembolehubah s
asal dalam fungsi utama
. changeValue
函数中,s
是 string
类型的副本。对 s
的修改不会影响 main
函数中的原始 s
变量。
指针传递
指针传递是指函数接收传入参数的地址。对参数内容的任何修改都会反映在原始变量中。例如:
func changePointer(s *string) { *s = "modified" } func main() { var s = "original" changePointer(&s) fmt.Println(s) //输出: modified }
在 changePointer
函数中,s
是指向原始 string
变量 s
的指针。对 *s
的修改会直接修改 main
函数中的原始 s
变量。
实战案例
以下是一个利用指针传递在实际场景中进行代码优化的示例:
type Person struct { Name string Age int } func sortByName(people []Person) { for i := 0; i < len(people)-1; i++ { for j := i + 1; j < len(people); j++ { if people[i].Name > people[j].Name { // 交换 people[i] 和 people[j] people[i], people[j] = people[j], people[i] } } } } func main() { people := []Person{ {"Alice", 20}, {"Bob", 25}, {"Charlie", 30}, } sortByName(people) fmt.Println(people) //输出: [{Alice 20} {Bob 25} {Charlie 30}] }
在这个示例中,sortByName
函数接收一个 Person
Hantaran penunjuk
Hantaran penunjuk bermaksud fungsi menerima alamat parameter masuk. Sebarang pengubahsuaian kepada kandungan parameter akan ditunjukkan dalam pembolehubah asal. Contohnya:rrreee
Dalam fungsichangePointer
, s
ialah penunjuk kepada string
pembolehubah s
asal. Pengubahsuaian kepada *s
mengubah suai terus pembolehubah s
asal dalam fungsi utama
. 🎜🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh menggunakan hantaran penunjuk untuk pengoptimuman kod dalam senario kehidupan sebenar: 🎜rrreee🎜Dalam contoh ini, fungsi sortByName
menerima Orang
Tuding pada kepingan. Dengan menghantar penunjuk, fungsi ini boleh mengubah suai secara langsung kandungan kepingan tanpa membuat salinan. Ini meningkatkan kecekapan fungsi, terutamanya apabila kepingannya besar. 🎜🎜🎜Kesimpulan🎜🎜🎜Memahami perbezaan antara passing by value dan passing by pointer adalah penting untuk menulis program Go dengan cekap. Melepasi nilai sesuai apabila salinan perlu diubah suai dan bukannya nilai asal, manakala lulus melalui penunjuk sesuai apabila nilai asal perlu diubah suai. Memilih kaedah penghantaran yang betul untuk keperluan anda boleh mengoptimumkan kod anda dan meningkatkan prestasi program anda. 🎜Atas ialah kandungan terperinci Perbezaan antara penunjuk struct dan pemindahan nilai struct dalam fungsi Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!