Go模拟实现迭代器模式

以下代码有一些是通过gpt生成的

普通模式

package main

import "fmt"

type Ints []int

func (i Ints) Iterator() *Iterator {
	return &Iterator{
		data:  i,
		index: 0,
	}
}

type Iterator struct {
	data  Ints
	index int
}

func (i *Iterator) HasNext() bool {
	return i.index < len(i.data)
}

func (i *Iterator) Next() (v int) {
	v = i.data[i.index]
	i.index++
	return v
}

func main() {
	ints := Ints{1, 2, 3}
	for it := ints.Iterator(); it.HasNext(); {
		fmt.Println(it.Next())
	}
}

闭包

package main

import "fmt"

type Ints []int

func (i Ints) Iterator() func() (int, bool) {
	index := 0
	return func() (val int, ok bool) {
		if index >= len(i) {
			return
		}

		val, ok = i[index], true
		index++
		return
	}
}

func main() {
	ints := Ints{1, 2, 3}
	it := ints.Iterator()
	for {
		val, ok := it()
		if !ok {
			break
		}
		fmt.Println(val)
	}
}

chan

package main

import "fmt"

type Ints []int

func (i Ints) Iterator() <-chan int {
	c := make(chan int)
	go func() {
		for _, v := range i {
			c <- v
		}
		close(c)
	}()
	return c
}

func main() {
	ints := Ints{1, 2, 3}
	for v := range ints.Iterator() {
		fmt.Println(v)
	}
}

闭包2

package main

import "fmt"

type Ints []int

func (i Ints) Do(fn func(int)) {
	for _, v := range i {
		fn(v)
	}
}

func main() {
	ints := Ints{1, 2, 3}
	ints.Do(func(v int) {
		fmt.Println(v)
	})
}
posted @   朝阳1  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示