今天用go写项目时候,发现使用for循环对结构体成员赋值时的一个坑。是巨坑。踩了很难找出来
问题描述
使用for循环对结构体成员赋值注意事项:
type X struct {
A int
}
func main() {
//定义了一个结构体数组,现在for循环给结构数组成员体赋值
data := []X{
X{0},
X{0},
}
}
采用 range 获取数组项不能修改数组中结构体的值如下:
for index,value := range data {
value.A = index + 1;
}
fmt.Printf("%v", data)
//输出为 [{0} {0}]
解决方法
//正确方式1
for index,_ := range data {
data[index].A = index + 1;
}
fmt.Printf("%v", data)
//输出为 [{1} {2}]
//正确方式2
for i := 0; i < len(data); i++ {
data[i].A = i+1
}
fmt.Printf("%v", data)
//输出为 [{1} {2}]
希望大家不要踩这个坑。