Golang Iter迭代器模式实现
我在学习Golang设计模式时遇到了Iter迭代器模式的实现问题。想请教大家:在Golang中如何优雅地实现一个类型安全的迭代器?标准库没有提供类似Java的Iterator接口,这种情况下应该怎样设计?是需要定义一个包含Next()和HasNext()方法的接口,还是说有更符合Go习惯的写法?能否提供一个完整的示例代码,包括如何通过for循环遍历自定义集合?特别想知道在Go中处理这种场景时有哪些最佳实践和需要注意的坑。
2 回复
在Golang中实现迭代器模式,可以通过接口定义迭代行为,让不同类型的数据结构实现统一遍历方式。
核心实现:
- 定义迭代器接口:
type Iterator interface {
HasNext() bool
Next() interface{}
}
- 具体迭代器实现:
type SliceIterator struct {
data []interface{}
index int
}
func (s *SliceIterator) HasNext() bool {
return s.index < len(s.data)
}
func (s *SliceIterator) Next() interface{} {
if s.HasNext() {
val := s.data[s.index]
s.index++
return val
}
return nil
}
- 容器接口:
type Container interface {
GetIterator() Iterator
}
- 具体容器:
type SliceContainer struct {
data []interface{}
}
func (s *SliceContainer) GetIterator() Iterator {
return &SliceIterator{
data: s.data,
index: 0,
}
}
使用示例:
container := &SliceContainer{data: []interface{}{1, "hello", 3.14}}
iter := container.GetIterator()
for iter.HasNext() {
fmt.Println(iter.Next())
}
优点:
- 统一遍历接口
- 隐藏底层数据结构
- 支持多种遍历方式
这种模式在集合类库中很常见,能让客户端代码与具体数据结构解耦。
更多关于Golang Iter迭代器模式实现的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


