我看到该范围返回键和值的“副本”。该范围有没有办法返回项目的地址?例子package mainimport "fmt"type MyType struct { field string}func main() { var array [10]MyType for _, e := range array { e.field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") }}http://play.golang.org/p/AFOGG9NGpx这里“字段”没有被修改,因为范围发送字段的副本,我必须使用索引还是有其他方法来修改值?
3 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
评论中已经说过了,但是对于那些立即寻找答案的人来说,这里是如何通过使用指针切片并对原始代码进行最少更改来实现预期结果的方法。
package main
import "fmt"
type MyType struct {
field string
}
func main() {
// Slice of pointers instead of slice of type
var array [10]*MyType
// Initialize array manually
for idx := range array {
array[idx] = &MyType{}
}
for _, e := range array {
e.field = "foo"
}
for _, e := range array {
fmt.Println(e.field)
fmt.Println("--")
}
}
- 3 回答
- 0 关注
- 238 浏览
添加回答
举报
0/150
提交
取消