Rumah > pembangunan bahagian belakang > Golang > Mengapa Pembolehubah Go Ditimpa?

Mengapa Pembolehubah Go Ditimpa?

Patricia Arquette
Lepaskan: 2024-10-24 07:54:30
asal
879 orang telah melayarinya

Why are Go Variables Being Overwritten?

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>
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan