Rumah >pembangunan bahagian belakang >Golang >Mengapa Penyahrujukan Penunjuk dalam Pergi Mengemas kini Struktur Asal?

Mengapa Penyahrujukan Penunjuk dalam Pergi Mengemas kini Struktur Asal?

Linda Hamilton
Linda Hamiltonasal
2024-12-01 00:26:10946semak imbas

Why Doesn't Dereferencing a Pointer in Go Update the Original Struct?

Penyahrujukan Penunjuk dalam Go

Dalam Go, penyahrujukan penuding melibatkan mengakses nilai yang disimpan dalam alamat memori yang ditunjuk oleh pembolehubah penuding.

Masalah:

Dalam contoh yang disediakan oleh tutorial Go, tingkah laku yang dijangkakan untuk penyahrujukan penunjuk tidak berlaku. Apabila pembolehubah penunjuk digunakan untuk menukar nilai struct, perubahan tidak disebarkan kepada salinan struct yang dinyahrujuk.

Penjelasan:

T := * operasi q mencipta salinan struct yang ditunjuk oleh q. Sebarang perubahan yang dibuat kepada q kemudiannya tidak akan menjejaskan t. Tingkah laku ini dijangka kerana Go menganggap penunjuk sebagai nilai, dan tugasan ialah operasi penyalinan.

Untuk memerhati perubahan yang dibuat melalui q dalam t, adalah perlu untuk mengekalkan penunjuk kepada struct daripada menyalin nilai. Ini boleh dicapai dengan menetapkan q kepada t sebaliknya:

t := q

Perbandingan C/C:

Tingkah laku penyahrujukan penunjuk dalam Go adalah serupa dengan yang terdapat dalam C/ C . Dalam kedua-dua bahasa, penunjuk menyimpan alamat nilai, dan membatalkan rujukannya memberikan akses kepada nilai sebenar. Walau bagaimanapun, dalam Go, tugasan kepada penunjuk menghasilkan nilai yang disalin, manakala dalam C/C , ia mengubah suai nilai yang dirujuk secara langsung.

Atas ialah kandungan terperinci Mengapa Penyahrujukan Penunjuk dalam Pergi Mengemas kini Struktur Asal?. 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