type Friend struct {
name string
age int
}
type Friends struct {
friends []Friend
}
我想让Friends
范围合适,这意味着,如果我的变量my_friends
的类型为Friends
,我可以通过以下方式循环播放:
for i, friend := range my_friends {
// bla bla
}
可以在Go吗?
答案 0 :(得分:12)
将好友作为结构吗?否则只需做
type Friends []Friend
答案 1 :(得分:10)
小心:提及deft_code时,此代码会在循环中断时泄漏通道和goroutine。不要将其用作一般模式。
在go中,无法使range
的任意类型兼容,如
range
仅支持切片,数组,通道和地图。
您可以使用range
迭代通道,如果您想要迭代动态生成的数据而不必使用切片或数组,这非常有用。
例如:
func Iter() chan *Friend {
c := make(chan *Friend)
go func() {
for i:=0; i < 10; i++ {
c <- newFriend()
}
close(c)
}()
return c
}
func main() {
// Iterate
for friend := range Iter() {
fmt.Println("A friend:", friend)
}
}
这是你可以做的最接近的事情。“
所以通常的做法是在你的类型上定义方法Iter()
或类似的东西
将其传递给range
。
有关range
的进一步阅读,请参阅the spec。
答案 2 :(得分:0)
例如,
var my_friends Friends
for i, friend := range my_friends.friends {
// bla bla
}