-
3.6 迭代器模式
-
代码实现
下面是一个简单的自定义数组类型的例子
Code
package iterator // Iterator 迭代器接口 type Iterator interface { HasNext() bool Next() // 获取当前元素,由于 Go 1.15 中还没有泛型,所以我们直接返回 interface{} CurrentItem() interface {} } // ArrayInt 数组 type ArrayInt[] int // Iterator 返回迭代器 func(a ArrayInt) Iterator() Iterator { return &ArrayIntIterator { arrayInt: a, index: 0, } } // ArrayIntIterator 数组迭代 type ArrayIntIterator struct { arrayInt ArrayInt index int } // HasNext 是否有下一个 func(iter * ArrayIntIterator) HasNext() bool { return iter.index < len(iter.arrayInt) - 1 } // Next 游标加一 func(iter * ArrayIntIterator) Next() { iter.index++ } // CurrentItem 获取当前元素 func(iter * ArrayIntIterator) CurrentItem() interface {} { return iter.arrayInt[iter.index] }
单元测试
package iterator import ( "testing" "github.com/stretchr/testify/assert" ) func TestArrayInt_Iterator(t * testing.T) { data: = ArrayInt { 1, 3, 5, 7, 8 } iterator: = data.Iterator() // i 用于测试 i: = 0 for iterator.HasNext() { assert.Equal(t, data[i], iterator.CurrentItem()) iterator.Next() i++ } }
- 留下你的读书笔记
- 你还没登录,点击这里
-
用户笔记留言