Rumah >pembangunan bahagian belakang >Golang >Mengapa Pembolehubah Go Ditimpa?
Pembolehubah Go Ditimpa
Dalam rutin Go, pengguna melaporkan isu di mana satu pembolehubah sedang ditulis ganti apabila pembolehubah lain ditetapkan. Khususnya, pengguna mencipta dua senarai integer bernama pathA dan pathB. Apabila laluanA dilanjutkan dengan nilai baharu daripada segi tiga, ia pada mulanya ditetapkan dengan betul tetapi kemudiannya ditimpa oleh laluanB.
Penyiasatan
Isu timbul disebabkan perkongsian tatasusunan sokongan antara kepingan. Dalam Go, apabila hirisan dilanjutkan melebihi kapasitinya, tatasusunan sandaran baharu diperuntukkan dan elemen sedia ada disalin ke tatasusunan baharu. Walau bagaimanapun, jika panjang hirisan kurang daripada kapasitinya, hirisan dan elemen yang dilampirkan akan berkongsi tatasusunan sandaran yang sama.
Dalam kod pengguna, apabila saiz laluanA dan laluanB berkembang, ia mencapai titik di mana panjang kepingan melebihi kapasitinya dan tatasusunan sandaran baharu telah diperuntukkan untuk laluanA. Walau bagaimanapun, sejak laluanB dicipta seterusnya, ia akhirnya menggunakan tatasusunan sandaran yang sama.
Penyelesaian
Untuk menyelesaikan isu ini, pengguna perlu memastikan bahawa kedua-dua laluanA dan pathB mempunyai tatasusunan sokongan bebas. Ini dicapai dengan memperuntukkan kepingan baharu secara manual untuk pathB menggunakan make() dan menyalin data lama menggunakan copy().
Kod Disemak
Berikut ialah kod yang diubah suai :
<code class="go">for i := 0; i < len(prePaths); i++ { newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i]) + 1) * 2) copy(newRoute, prePaths[i]) nextA := nextLine[i] nextB := nextLine[i+1] pathA := append(newRoute, nextA) pathB := append(prePaths[i], nextB) postPaths = append(postPaths, pathA) postPaths = append(postPaths, pathB) }</code>
Kod ini memastikan bahawa kedua-dua laluanA dan laluanB mempunyai tatasusunan sandaran mereka sendiri, menghalang isu timpa ganti.
Atas ialah kandungan terperinci Mengapa Pembolehubah Go Ditimpa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!