type Seq … type Seq2 … type coro … //go:linkname newcoro runtime.newcoro func newcoro(func(*coro)) *coro //go:linkname coroswitch runtime.coroswitch func coroswitch(*coro) // Pull converts the “push-style” iterator sequence seq // into a “pull-style” iterator accessed by the two functions // next and stop. // // Next returns the next value in the sequence // and a boolean indicating whether the value is valid. // When the sequence is over, next returns the zero V and false. // It is valid to call next after reaching the end of the sequence // or after calling stop. These calls will continue // to return the zero V and false. // // Stop ends the iteration. It must be called when the caller is // no longer interested in next values and next has not yet // signaled that the sequence is over (with a false boolean return). // It is valid to call stop multiple times and when next has // already returned false. Typically, callers should “defer stop()”. // // It is an error to call next or stop from multiple goroutines // simultaneously. // // If the iterator panics during a call to next (or stop), // then next (or stop) itself panics with the same value. func Pull[V any](seq Seq[V]) (next func() (V, bool), stop func()) { … } // Pull2 converts the “push-style” iterator sequence seq // into a “pull-style” iterator accessed by the two functions // next and stop. // // Next returns the next pair in the sequence // and a boolean indicating whether the pair is valid. // When the sequence is over, next returns a pair of zero values and false. // It is valid to call next after reaching the end of the sequence // or after calling stop. These calls will continue // to return a pair of zero values and false. // // Stop ends the iteration. It must be called when the caller is // no longer interested in next values and next has not yet // signaled that the sequence is over (with a false boolean return). // It is valid to call stop multiple times and when next has // already returned false. Typically, callers should “defer stop()”. // // It is an error to call next or stop from multiple goroutines // simultaneously. // // If the iterator panics during a call to next (or stop), // then next (or stop) itself panics with the same value. func Pull2[K, V any](seq Seq2[K, V]) (next func() (K, V, bool), stop func()) { … } var goexitPanicValue …