Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menukar Sekeping Rentetan kepada Sekeping Penunjuk kepada Rentetan dalam Go dengan Betul?
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]
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]) }
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) }
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!