go实现一个简单切片迭代器

发布时间 2023-04-01 14:38:01作者: 流走在黑夜深巷的猫
package main

import "fmt"

type iterator struct {
	data  []int
	index int // 索引
}

// 通过简单工厂函数构造一个实例对象
func newIterator(data []int) *iterator {
	return &iterator{data: data}
}

// 判断迭代器是否能迭代
func (iter *iterator) HasNext() bool {
	if iter.data == nil || len(iter.data) == 0 {
		return false
	}
	return iter.index < len(iter.data)
}

// 迭代器迭代数据
func (iter *iterator) Next() int {
	defer func() {
		iter.index++
	}() // 延時函數在Next函數調用結束後執行defer函數
	return iter.data[iter.index]
	//iter.index++
}

func main() {
	ints := []int{1, 2, 3, 4, 5}
	iterator := newIterator(ints)
	for iterator.HasNext() {
		fmt.Println(iterator.Next())
	}
}