以下代码有一些是通过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)
})
}