package main import ( "fmt" ) func Distinct[T comparable](data []T) []T { m := make(map[T]struct{}, len(data)) for _, v := range data { m[v] = struct{}{} } newData := make([]T, 0, len(m)) for v, _ := range m { newData = append(newData, v) } return newData } type UpdateDatetimeStruct struct { AdgroupId *int64 json:"adgroup_id,omitempty" BeginDate *string json:"begin_date,omitempty" EndDate *string json:"end_date,omitempty" TimeSeries *string json:"time_series,omitempty" } func main() { a := []int64{10691915030, 10704577115, 10689734847} a = Distinct(a) tt := make([]UpdateDatetimeStruct, 0) for _, group := range a { fmt.Println(&group) tt = append(tt, UpdateDatetimeStruct{ AdgroupId: &group, }) } } 当前代码中,为什么打印出来的&group都是一样的?
时间: 2024-01-08 22:04:32 浏览: 61
在循环中,`group`是一个变量,其值随着循环的进行而不断变化。但是在这个位置上,`&group`获取的是`group`变量的地址,而不是其值。因此,无论循环执行多少次,`&group`的值都是相同的,因为它始终指向同一个变量。如果要获取每个元素的地址,可以在创建新的变量来存储它们的地址。例如:
```
for _, group := range a {
g := group
fmt.Println(&g)
tt = append(tt, UpdateDatetimeStruct{
AdgroupId: &g,
})
}
```
在这个版本的代码中,我们使用了一个新的变量`g`来存储每个元素的值,然后我们打印`&g`的地址,这样就可以获得每个元素的地址了。
阅读全文