迭代器模式

迭代器能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。

package main
import "fmt"
type Iterator interface {
hasNext() bool
getNext() *User
}
type Collection interface {
createIterator() Iterator
}
type User struct {
name string
age int
}
type UserCollection struct {
users []*User
}
type UserIterator struct {
index int
users []*User
}
func (u *UserCollection) createIterator() Iterator {
return &UserIterator{
users: u.users,
}
}
func (u *UserIterator) hasNext() bool {
return u.index < len(u.users)
}
func (u *UserIterator) getNext() *User {
if u.hasNext() {
user := u.users[u.index]
u.index++
return user
}
return nil
}
func main() {
user1 := &User{
name: "a",
age: 30,
}
user2 := &User{
name: "b",
age: 20,
}
userCollection := &UserCollection{
users: []*User{user1, user2},
}
iterator := userCollection.createIterator()
for iterator.hasNext() {
user := iterator.getNext()
fmt.Printf("User is %+v\n", user)
}
}

输出结果

User is &{name:a age:30}
User is &{name:b age:20}

参考资料

https://refactoringguru.cn/design-patterns/iterator/go/example

posted on   王景迁  阅读(7)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示