github.com/l3x/learn-fp-go@v0.0.0-20171228022418-7639825d0b71/1-functional-fundamentals/ch02-collections/01_iterator/main.go (about)

     1  package main
     2  
     3  type IntIterator interface {
     4  	Next() (value string, ok bool)
     5  }
     6  const INVALID_INT_VAL = -1
     7  const INVALID_STRING_VAL = ""
     8  
     9  type Collection struct {
    10  	index int
    11  	List  []string
    12  }
    13  
    14  func (collection *Collection) Next() (value string, ok bool) {
    15  	collection.index++
    16  	if collection.index >= len(collection.List) {
    17  		return INVALID_STRING_VAL, false
    18  	}
    19  	return collection.List[collection.index], true
    20  }
    21  
    22  func newSlice(s []string) *Collection {
    23  	return &Collection{INVALID_INT_VAL, s}
    24  }
    25  
    26  func main() {
    27  	var intCollection IntIterator
    28  	intCollection = newSlice([]string{"CRV", "IS250", "Blazer"})
    29  	value, ok := intCollection.Next()
    30  	for ok {
    31  		println(value)
    32  		value, ok = intCollection.Next()
    33  	}
    34  }