为了账号安全,请及时绑定邮箱和手机立即绑定

使结构“可调整范围”?

使结构“可调整范围”?

Go
慕村9548890 2021-05-02 12:50:27
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贡献1780条经验 获得超5个赞

朋友是一个结构?否则只需做

type Friends []Friend


查看完整回答
反对 回复 2021-05-17
?
湖上湖

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。


查看完整回答
反对 回复 2021-05-17
?
慕慕森

TA贡献1856条经验 获得超17个赞

例如,


var my_friends Friends


for i, friend := range my_friends.friends {

    // bla bla

}


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信