11
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で可能ですか?

4

3 に答える 3

14

友達は構造体になりますか?それ以外の場合は単に行う

type Friends []Friend
于 2012-10-15T13:45:28.383 に答える
13

注意: deft_codeが言及しているように、このコードはループが壊れたときにチャネルとゴルーチンをリークします。これを一般的なパターンとして使用しないでください。


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

于 2012-10-15T12:49:50.980 に答える
0

例えば、

var my_friends Friends

for i, friend := range my_friends.friends {
    // bla bla
}
于 2012-10-15T11:49:19.520 に答える