Pointers 在Go中处理循环中指针结构的正确方法是什么?

Pointers 在Go中处理循环中指针结构的正确方法是什么?,pointers,struct,go,Pointers,Struct,Go,在go游乐场上的这个示例中,您可以看到在对象列表上循环并将它们放入指针结构的数组中,最终会多次将相同的条目放入数组中 解决这个问题的一个可能的方法是创建一个新字符串,并将该字符串从循环字符串中冲刺到新字符串中。这看起来很傻 处理这个问题的惯用正确方法是什么 如果我理解正确,并且您只需要一个指向原始数组中相应字符串的指针数组,您可以随时这样做 # choose correct size from beginning to avoid costly resize o := make([]*stri

在go游乐场上的这个示例中,您可以看到在对象列表上循环并将它们放入指针结构的数组中,最终会多次将相同的条目放入数组中

解决这个问题的一个可能的方法是创建一个新字符串,并将该字符串从循环字符串中冲刺到新字符串中。这看起来很傻


处理这个问题的惯用正确方法是什么

如果我理解正确,并且您只需要一个指向原始数组中相应字符串的指针数组,您可以随时这样做

# choose correct size from beginning to avoid costly resize
o := make([]*string, len(f))

# iterate only over index
for i := range f {
    o[i] = &f[i].username
}

您可以使用上面所示的更改进入操场。

这将假定我所测量的对象是可转位的。不幸的是,它不是--我使用Next()从一个sql结果对象中提取。我可以先将sql结果转储到一个常规的非指针数组中,但这在习惯用法上似乎也不正确。在这种情况下,您可能需要解决如下问题:,只需将您感兴趣的值复制到某个临时变量并取其指针。顺便说一句,字符串已经是Go中不可变数据的引用,因此,如果只使用
[]string
而不是
[]*string
,复制它们的成本同样低廉。还参考了:像
[]byte
这样的切片以及Go中的一些其他重要类型;请参阅,以了解一些结构的描述,以及我在总结什么时候应该/不应该使用指针方面的最佳做法。