func (s *Sender[T]) Close() {
	close(s.values)
}
Close tells the receiver that no more values will arrive.
After Close is called, the Sender may no longer be used.
package chans
import "runtime"
func Ranger[T any]() (*Sender[T], *Receiver[T]) {
	c := make(chan T)
	d := make(chan bool)
	s := &Sender[T]{values: c, done: d}
	r := &Receiver[T]{values: c, done: d}
	runtime.SetFinalizer(r, r.finalize)
	return s, r
}
type Sender[T any] struct {
	values chan<- T
	done <-chan bool
}
func (s *Sender[T]) Send(v T) bool {
	select {
	case s.values <- v:
		return true
	case <-s.done:
		return false
	}
}