Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menukar Sekeping Rentetan kepada Sekeping Penunjuk kepada Rentetan dalam Go dengan Betul?

Bagaimana untuk Menukar Sekeping Rentetan kepada Sekeping Penunjuk kepada Rentetan dalam Go dengan Betul?

Linda Hamilton
Lepaskan: 2024-12-19 20:22:17
asal
693 orang telah melayarinya

How to Correctly Convert a Slice of Strings to a Slice of Pointers to Strings in Go?

Cara Menukar Sekeping Rentetan kepada Sekeping Penunjuk kepada Rentetan

Apabila bekerja dengan kepingan rentetan, selalunya perlu untuk menukar mereka kepada hirisan penunjuk kepada rentetan. Ini membolehkan anda mengakses nilai rentetan asas secara langsung, dan bukannya perlu menyahrujuk nilai tersebut setiap kali.

Percubaan Pertama

Satu pendekatan untuk mencapainya ialah dengan mengulangi kepingan rentetan dan tambahkan setiap alamat rentetan pada kepingan baharu. Walau bagaimanapun, ini tidak berfungsi seperti yang diharapkan kerana pembolehubah gelung v ditetapkan dalam setiap lelaran, menukar nilainya tetapi bukan alamatnya. Akibatnya, anda akan mendapat sekeping penunjuk yang semuanya menghala ke alamat yang sama.

values1 := []string{"a", "b", "c"}
var values2 []*string
for _, v := range values1 {
    fmt.Printf("%p | %T\n", v, v)
    values2 = append(values2, &v)
}
fmt.Println(values2)
// Output:
// %!p(string=a) => string
// %!p(string=b) => string
// %!p(string=c) => string
// [0xc42000e1d0 0xc42000e1d0 0xc42000e1d0]
Salin selepas log masuk

Penyelesaian Betul

Untuk mencipta sekeping penunjuk dengan betul pada rentetan, anda perlu menambahkan alamat elemen kepingan yang betul bagi kepingan asal:

for i := range values1 {
    values2 = append(values2, &values1[i])
}
Salin selepas log masuk

Dalam kes ini, pembolehubah gelung i digunakan untuk mengindeks ke dalam kepingan asal, memastikan bahawa setiap alamat yang ditambahkan pada nilai2 sepadan dengan rentetan unik dalam nilai1.

Penyelesaian Alternatif

Penyelesaian alternatif adalah untuk mencipta setempat sementara pembolehubah dan tambahkan alamat mereka:

for _, v := range values1 {
    v2 := v
    values2 = append(values2, &v2)
}
Salin selepas log masuk

Pendekatan ini adalah bebas daripada kepingan asal dan sebarang pengubahsuaian yang dibuat kepada nilai1 tidak akan menjejaskan nilai2.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Sekeping Rentetan kepada Sekeping Penunjuk kepada Rentetan dalam Go dengan Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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