將字串切片轉換為字串指標切片
此任務的目標是將字串切片轉換為包含以下內容的切片:指向每個字串的指標。讓我們來看一個具體的例子:
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)
初始混亂
v 儘管是一個字串,但在整個循環中仍然保持在相同的記憶體位址,這似乎違反直覺。這是因為在這種情況下,v不是指向字串的指針,而是values1中每個字串的副本。
兩個可能的解決方案
解1:
for i, _ := range values1 { values2 = append(values2, &values1[i]) }
此方法正確地將指針附加方法到原始值1中的元素切片到值2。不過,需要注意的是,values2 現在包含直接指向 value1 的位址,因此只要 value2 存在,values1 就會保留在記憶體中。
解2:
for _, v := range values1 { v2 := v values2 = append(values2, &v2) }
此替代方案為每次迭代建立一個暫時局部變數(v2),為其指派v 的值,然後將指向v2 的指標附加到價值觀2。這確保了values1獨立於values2,並且對values1的任何修改都不會影響values2。
以上是Go 中如何將字串切片轉換為字串指標切片?的詳細內容。更多資訊請關注PHP中文網其他相關文章!