Bagaimana untuk menghantar nilai pulangan fungsi golang

WBOY
Lepaskan: 2024-04-23 09:39:01
asal
532 orang telah melayarinya

Nilai pulangan fungsi Go diluluskan oleh nilai, iaitu, pengubahsuaian kepada nilai pulangan dalam fungsi tidak akan menjejaskan nilai dalam kod panggilan. Walau bagaimanapun, dengan hantaran penunjuk, kita boleh menghantar alamat memori pembolehubah supaya pengubahsuaian pada penunjuk ditunjukkan dalam pembolehubah asal kod panggilan. Kaedah ini sering digunakan dalam senario di mana koleksi nilai seperti kepingan perlu diubah suai.

Bagaimana untuk menghantar nilai pulangan fungsi golang

Kaedah menghantar nilai pulangan fungsi bahasa Go

Dalam bahasa Go, nilai pulangan fungsi biasanya menggunakan kaedah hantaran nilai. Ini bermakna pengubahsuaian yang dibuat kepada nilai pulangan dalam fungsi tidak menjejaskan nilai dalam kod yang memanggil fungsi tersebut.

Value Passing

Mari kita pertimbangkan fungsi berikut:

func increment(num int) {
  num = num + 1
}

func main() {
  myNum := 5
  increment(myNum)
  fmt.Println(myNum) // 输出:5
}
Salin selepas log masuk

Dalam fungsi ini, walaupun kita mengubah suai nilai pembolehubah num, ia hanya sah dalam fungsi. myNum dalam fungsi main masih kekal 5 kerana fungsi itu diluluskan oleh nilai. num 变量的值,但它只在函数内有效。main 函数中的 myNum 仍然保持为 5,因为函数使用值传递。

引用传递

有时,我们需要将对变量的修改传递回函数调用代码中。为此,我们可以使用指针传递。当我们传递指针时,我们实际上传递的是变量的内存地址,而不是变量本身。

让我们修改上面的示例:

func increment(num *int) {
  *num = *num + 1
}

func main() {
  myNum := 5
  increment(&myNum)
  fmt.Println(myNum) // 输出:6
}
Salin selepas log masuk

通过传递 &myNum,我们将 myNum 变量的地址传递给 increment 函数。现在,对指针进行的任何修改都会反映在函数调用代码中的原始变量中。

实战案例

让我们考虑一个需要修改 slice 的函数。slice 是值的集合,并且通常通过值传递。如果我们想在函数内修改 slice,则必须使用指针传递。

func removeElement(s []int, idx int) {
  copy(s[idx:], s[idx+1:])
  s[len(s)-1] = 0
  s = s[:len(s)-1]
}

func main() {
  mySlice := []int{1, 2, 3, 4, 5}
  removeElement(&mySlice, 1)
  fmt.Println(mySlice) // 输出:[]1 3 4 5
}
Salin selepas log masuk

removeElement 函数中,我们通过传递 &mySlice

Lulus dengan rujukan

🎜🎜Kadangkala, kita perlu menghantar pengubahsuaian kepada pembolehubah kembali kepada kod panggilan fungsi. Untuk ini kita boleh menggunakan hantaran penunjuk. Apabila kita melepasi penunjuk, kita sebenarnya menghantar alamat memori pembolehubah, bukan pembolehubah itu sendiri. 🎜🎜Mari kita ubah suai contoh di atas: 🎜rrreee🎜Dengan menghantar &myNum, kami menghantar alamat pembolehubah myNum kepada fungsi increment. Sekarang, sebarang pengubahsuaian yang dibuat pada penuding akan ditunjukkan dalam pembolehubah asal dalam kod panggilan fungsi. 🎜🎜🎜Kes praktikal🎜🎜🎜Mari kita pertimbangkan fungsi yang perlu mengubah suai kepingan. Potongan ialah koleksi nilai, dan biasanya diluluskan oleh nilai. Jika kita ingin mengubah suai kepingan dalam fungsi, kita perlu menghantarnya menggunakan penunjuk. 🎜rrreee🎜Dalam fungsi removeElement, kami mengubah suai kepingan asal dengan menghantar penuding &mySlice. 🎜🎜Dengan memahami dan menggunakan kaedah lulus nilai pulangan yang sesuai, kami boleh menulis kod Go yang berfungsi sepenuhnya dan cekap. 🎜

Atas ialah kandungan terperinci Bagaimana untuk menghantar nilai pulangan fungsi golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan