将切片成员的地址附加到另一个切片

问题描述 投票:0回答:1

我正在使用 awsses-go-skd,我需要将

to []string
转换为
ToAddresses []*string

但是我没能做到。这是解释原因的最小重现代码:

package main
import "fmt"
func main() {
  a := []string{"a", "b", "c"}
  var b []*string
  for _, s := range a {
    b = append(b, &s)
  }
  for _, s := range b {
    fmt.Printf("%s, ", *s)
  }
}

输出是:c,c,c,我期望:a,b,c,

为什么?以及如何解决?

go amazon-ses
1个回答
0
投票

有一个循环变量在每次迭代中重复使用。其地址将是相同的(只有 1 个循环变量),并且循环后的指向值将是最后一次迭代中设置的值。获取元素的地址:

for i := range a { 
    b = append(b, &a[i])
}

但是有一个助手可以实现这一点:

aws.StringSlice

所以你可以简单地写:

b := aws.StringSlice(a)
© www.soinside.com 2019 - 2024. All rights reserved.