github.com/goplus/gop@v1.2.6/printer/_testdata/42-UDT-RangeIterator/udt_range_iter.gop (about) 1 type fooIter struct { 2 data *foo 3 idx int 4 } 5 6 func (p *fooIter) Next() (key int, val string, ok bool) { 7 if p.idx < len(p.data.key) { 8 key, val, ok = p.data.key[p.idx], p.data.val[p.idx], true 9 p.idx++ 10 } 11 return 12 } 13 14 type foo struct { 15 key []int 16 val []string 17 } 18 19 func newFoo() *foo { 20 return &foo{key: [3, 7], val: ["Hi", "Go+"]} 21 } 22 23 func (p *foo) Gop_Enum() *fooIter { 24 return &fooIter{data: p} 25 } 26 27 obj := newFoo() 28 for k, v <- obj { 29 println(k, v) 30 } 31 32 println({v: k for k, v <- obj})