首頁 >後端開發 >Golang >如何在 Go 中正確地將字串切片轉換為指向字串的指標切片?

如何在 Go 中正確地將字串切片轉換為指向字串的指標切片?

Linda Hamilton
Linda Hamilton原創
2024-12-19 20:22:17695瀏覽

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

如何將一段字串轉換為一段指向字串的指標

使用字串片段時,通常需要轉換它們是指向字元串的指針片段。這允許您直接存取底層字串值,而不必每次都取消引用它們。

第一次嘗試

實現此目的的一種方法是迭代字串切片並將每個字串的位址附加到一個新切片。然而,這並不能按預期工作,因為循環變數 v 在每次迭代中都被賦值,改變了它的值,但沒有改變它的位址。結果,您最終得到了全部指向相同位址的指標切片。

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]

正確解

正確建立指標切片對於字串,您需要附加原始切片的正確切片元素的位址:

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

在這種情況下,循環變數 i用於索引原始切片,確保新增至values2的每個位址都對應values1中的唯一字串。

替代解決方案

另一個解決方案是建立臨時局部變數並附加這些變數的位址:

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

此方法獨立於原始切片,對value1 進行的任何修改都會不影響價值觀2。

以上是如何在 Go 中正確地將字串切片轉換為指向字串的指標切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn