TransformSimple 创建新的 goroutine 进行转换
(r *Reader[T], fn func(T) (U, error))
| 570 | |
| 571 | // TransformSimple 创建新的 goroutine 进行转换 |
| 572 | func TransformSimple[T, U any](r *Reader[T], fn func(T) (U, error)) *Reader[U] { |
| 573 | out, writer := Pipe[U](5) |
| 574 | |
| 575 | go func() { |
| 576 | defer writer.Close() |
| 577 | for { |
| 578 | v, err := r.Recv() |
| 579 | if errors.Is(err, io.EOF) { |
| 580 | return |
| 581 | } |
| 582 | if err != nil { |
| 583 | writer.Send(*new(U), err) |
| 584 | return |
| 585 | } |
| 586 | |
| 587 | result, err := fn(v) |
| 588 | if errors.Is(err, ErrSkip) { |
| 589 | continue |
| 590 | } |
| 591 | if err != nil { |
| 592 | writer.Send(*new(U), err) |
| 593 | return |
| 594 | } |
| 595 | |
| 596 | if writer.Send(result, nil) { |
| 597 | return |
| 598 | } |
| 599 | } |
| 600 | }() |
| 601 | |
| 602 | return out |
| 603 | } |
| 604 | |
| 605 | // Filter 创建只包含匹配谓词的值的新读取器 |
| 606 | func Filter[T any](r *Reader[T], predicate func(T) bool) *Reader[T] { |