Mengapa Pembolehubah Tetapan Satu Pergi Menggantikan Yang Lain?

DDD
Lepaskan: 2024-10-24 08:09:30
asal
886 orang telah melayarinya

Why Does Setting One Go Variable Overwrite the Other?

Go pembolehubah sedang ditimpa

Dalam kod ini, pengarang menghadapi isu di mana laluan pembolehubah A ditimpa semasa menetapkan laluanB. Ini menunjukkan bahawa kedua-dua pembolehubah merujuk tatasusunan asas yang sama, mengakibatkan pengubahsuaian pada satu mempengaruhi yang lain.

Isu ini berpunca daripada penggunaan fungsi append() dengan kepingan dalam Go. Apabila menambahkan elemen pada kepingan, Go menyemak sama ada tatasusunan asas mempunyai kapasiti yang mencukupi untuk menampung elemen baharu. Jika tidak, ia memperuntukkan tatasusunan yang lebih besar dan menyalin elemen sedia ada.

Dalam kod yang disediakan, laluan hirisan digunakan untuk mencipta laluanA dan laluanB. Jika kapasiti tatasusunan asas laluan melebihi apabila menambahkan sama ada pada laluanA atau laluanB, tatasusunan baharu akan diperuntukkan. Walau bagaimanapun, memandangkan kedua-dua laluanA dan laluanB berasal daripada kepingan yang sama, ia berkongsi tatasusunan asas yang sama.

Untuk mengelakkan isu ini, anda perlu membuat salinan bebas laluan sebelum menggunakannya untuk memulakan laluanA dan laluanB. Ini boleh dicapai menggunakan fungsi make() dan copy(), seperti yang ditunjukkan dalam suntingan kedua pengarang:

<code class="go">newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i])+1)*2)
copy(newRoute, prePaths[i])

pathA := append(newRoute, nextA)
pathB := append(prePaths[i], nextB)</code>
Salin selepas log masuk

Dalam kod yang disemak ini, newRoute ialah kepingan berasingan dengan tatasusunan asasnya sendiri. Ini memastikan laluanA dan laluanB mempunyai salinan bebas data, menghalang pengubahsuaian kepada satu daripada menjejaskan yang lain.

Atas ialah kandungan terperinci Mengapa Pembolehubah Tetapan Satu Pergi Menggantikan Yang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!