使结构“可调整范围”?

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中有可能吗?


慕村9548890
浏览 152回答 3
3回答

翻阅古今

有朋友是一个结构?否则只需做type Friends []Friend

湖上湖

当心:如deft_code所述,当循环中断时,此代码会泄漏通道和goroutine。请勿将其用作常规模式。使用go时,无法使任何类型兼容range,因为它 range仅支持slice,数组,通道和映射。您可以使用来遍历通道range,如果您想遍历动态生成的数据而不必使用切片或数组,这将很有用。例如:func Iter() chan *Friend {&nbsp; &nbsp;c := make(chan *Friend)&nbsp; &nbsp;go func() {&nbsp; &nbsp; &nbsp; for i:=0; i < 10; i++ {&nbsp; &nbsp; &nbsp; &nbsp; c <- newFriend()&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; close(c)&nbsp; &nbsp;}()&nbsp; &nbsp;return c}func main() {&nbsp; // Iterate&nbsp;&nbsp; for friend := range Iter() {&nbsp; &nbsp; fmt.Println("A friend:", friend)&nbsp; }}这是使“可调整范围”变得最接近的事情。因此,一种常见的做法是Iter()在您的类型上定义一个方法或类似的东西,并将其传递给range。有关进一步的阅读,请参见规范range。

慕慕森

例如,var my_friends Friendsfor i, friend := range my_friends.friends {&nbsp; &nbsp; // bla bla}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go