热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go设计模式18迭代器模式

Go设计模式实现,包含常见的设计模式实现,同时这也是极客时间-设计模式之美的笔记,源课程采用Java实现,本系列会采用Go实现课程:65|迭代器模式(上):相比直接遍历集合数据,使



  • Go 设计模式实现,包含常见的设计模式实现,同时这也是 极客时间-设计模式之美 的笔记,源课程采用 Java 实现,本系列会采用 Go 实现

  • 课程: 65 | 迭代器模式(上):相比直接遍历集合数据,使用迭代器有哪些优势?

  • 本文代码仓库: https://github.com/mohuishou/go-design-pattern :star2::star2::star2::star2::star2:

  • RoadMap: 18/22 持续更新中,预计一周更新 2 ~ 3 种设计模式,预计到 202010 月底前更新完成

  • 获取更新: Github 知乎 RSS 开发者头条 **


笔记



代码实现


下面是一个简单的自定义数组类型的例子


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 }
// 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++
}
}



推荐阅读
author-avatar
火立者
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有