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})