我觉得 go 1.23 的 range over func 挺好的

1次阅读

共计 566 个字符,预计需要花费 2 分钟才能阅读完成。

看了一下之前的提案,之前没有泛型,然后一系列 go 的迭代器实现五花八门:

  • runtime.CallersFrames
  • bufio.Scanner
  • database/sql.Rows
  • archive/tar.Reader.Next
  • bufio.Reader.ReadByte
  • bufio.Scanner.Scan
  • container/ring.Ring.Do

相似的函数签名参数作用也不一定相同

现在有了泛型就加上么,而且目前 iter 里的东西极少

type Seq[V any] func(yield func(V) bool)
type Seq2[K, V any] func(yield func(K, V) bool)

func Pull[V any](seq Seq[V]) (next func() (V, bool), stop func())
func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func())

不想看细节和实现就当语法糖用也不麻烦, 对于 Seq[V any]Seq[K, V any],使用上也就是 range 时前面变量数量的区别

for v := range seq {...}
// or
for k, v := raneg seq2 {...}

喜欢函数式的也不是不能凑合用:

slices.Values(func(v T) bool {...})
正文完
 0