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中有可能吗?
3 回答
湖上湖
TA贡献2003条经验 获得超2个赞
当心:如deft_code所述,当循环中断时,此代码会泄漏通道和goroutine。请勿将其用作常规模式。
使用go时,无法使任何类型兼容range,因为它 range仅支持slice,数组,通道和映射。
您可以使用来遍历通道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。
慕慕森
TA贡献1856条经验 获得超17个赞
例如,
var my_friends Friends
for i, friend := range my_friends.friends {
// bla bla
}
- 3 回答
- 0 关注
- 151 浏览
添加回答
举报
0/150
提交
取消