Rumah >pembangunan bahagian belakang >Golang >Mengapa Penukaran Pembolehubah Berlaku dalam Go Apabila Dilampirkan pada Slices daripada Tatasusunan yang Sama?
Kod anda menghadapi isu penggantian pembolehubah kerana anda mencipta kepingan baharu (pathA dan pathB) dengan menambahkan elemen pada tatasusunan sandaran yang sama (laluan) dalam satu gelung.
Latar Belakang pada Slices dalam Go:
Masalah dengan Kod Anda:
Dalam kod anda, anda sedang mencipta dua kepingan baharu, laluanA dan laluanB, menggunakan fungsi tambah:
pathA := append(route, nextA) pathB := append(route, nextB)
Begini perkara yang berlaku:
Penyelesaian:
Untuk mengelakkan tiruan ini, anda perlu pastikan laluanA dan laluanB mempunyai tatasusunan sandaran yang unik. Anda boleh mencapai ini dengan membuat kepingan baharu secara manual untuk salah satu daripadanya menggunakan make dan copy:
newRoute := make([]int, len(route), (cap(route)+1)*2) copy(newRoute, route) if i % 2 == 0 { pathA := append(newRoute, nextA) } else { pathB := append(newRoute, nextB) }
Atas ialah kandungan terperinci Mengapa Penukaran Pembolehubah Berlaku dalam Go Apabila Dilampirkan pada Slices daripada Tatasusunan yang Sama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!