Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah penunjuk mempengaruhi pengubahsuaian nilai dalam fungsi Go?

Bagaimanakah penunjuk mempengaruhi pengubahsuaian nilai dalam fungsi Go?

Linda Hamilton
Linda Hamiltonasal
2024-10-27 02:32:02647semak imbas

How do pointers affect value modification in Go functions?

Memahami Pengubahsuaian Nilai dengan Penunjuk dalam Go

Dalam Go, penunjuk membenarkan akses tidak langsung dan pengubahsuaian nilai. Walau bagaimanapun, memahami cara penunjuk berfungsi adalah penting apabila menghantarnya ke fungsi.

Apabila menghantar penuding kepada fungsi, dua senario timbul: pengubahsuaian nilai berbanding penugasan semula penuding.

Senario 1 : Pengubahsuaian Nilai

Pertimbangkan kod ini:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   *p = Test{4}
}</code>

Di sini, fungsi f menerima penunjuk kepada struct Ujian. Di dalam f, penuding dinyahrujuk (*p) diberikan struct Ujian baharu dengan nilai 4. Ini mengubah suai struct asal asal dalam fungsi utama dan outputnya ialah 4.

Senario 2: Penugasan Semula Penunjuk

Sekarang, mari kita ubah sedikit kod:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 2
}
func f(p *Test) {
   // ?
   p = &amp;Test{4}
}</code>

Dalam kes ini, daripada mengubah suai nilai yang ditunjuk, fungsi menetapkan semula penunjuk p kepada yang baharu Uji struct dengan nilai 4. Memandangkan p ialah pembolehubah tempatan dalam f, perubahan ini tidak menjejaskan struct i asal dalam fungsi utama, dan output kekal 2.

Penyelesaian: Ubah Suai Bertitik Value

Untuk mengubah suai nilai yang ditunjuk, kita mesti menyahrujuk penuding dan terus mengakses ahli struct:

<code class="go">type Test struct { Value int }

func main() {
   var i Test = Test {2}
   var p *Test = &amp;i
   f(p)
   println(i.Value)  // 4
}
func f(p *Test) {
   p.Value = 4
}</code>

Dengan menggunakan p.Value, kami mengubah suai medan Nilai struct asal , menghasilkan output 4.

Atas ialah kandungan terperinci Bagaimanakah penunjuk mempengaruhi pengubahsuaian nilai dalam fungsi Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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