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で可能ですか?
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で可能ですか?
友達は構造体になりますか?それ以外の場合は単に行う
type Friends []Friend
注意: 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
。
例えば、
var my_friends Friends
for i, friend := range my_friends.friends {
// bla bla
}