Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah penunjuk mempengaruhi pengubahsuaian nilai dalam fungsi Go?
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 = &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 = &i f(p) println(i.Value) // 2 } func f(p *Test) { // ? p = &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 = &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!