package main import ( "context" "crypto/sha256" "encoding/hex" "fmt" "hash" "io" "math" "net/url" "reflect" "sort" "sync/atomic" "time" "unsafe" ) const ( MaxRetries = 3 BaseDelay = 100 * time.Millisecond MaxDelay = 5 * time.Second ) type Executor[T any] struct { workers int tasks chan func() T results chan T } func NewExecutor[T any](workers int) *Executor[T] { return &Executor[T]{ workers: workers, tasks: make(chan func() T, workers*2), results: make(chan T, workers*2), } } func (e *Executor[T]) Submit(task func() T) { e.tasks <- task } func (e *Executor[T]) Run(ctx context.Context) []T { for i := 0; i < e.workers; i++ { go func() { for { select { case <-ctx.Done(): return case task := <-e.tasks: e.results <- task() } } }() } var results []T for i := 0; i < cap(e.tasks); i++ { select { case r := <-e.results: results = append(results, r) case <-ctx.Done(): return results } } return results } func retryWithBackoff(operation func() error) error { var err error delay := BaseDelay for i := 0; i < MaxRetries; i++ { if err = operation(); err == nil { return nil } if i < MaxRetries-1 { jitter := time.Duration(rand.Int63n(int64(delay / 2))) time.Sleep(delay + jitter) delay = time.Duration(math.Min(float64(delay*2), float64(MaxDelay))) } } return fmt.Errorf("operation failed after %d retries: %w", MaxRetries, err) } func HashContent(r io.Reader) (string, error) { h := sha256.New() if _, err := io.Copy(h, r); err != nil { return "", fmt.Errorf("hashing failed: %w", err) } return hex.EncodeToString(h.Sum(nil)), nil } func SliceToMap[K comparable, V any](items []V, keyFn func(V) K) map[K]V { result := make(map[K]V, len(items)) for _, item := range items { result[keyFn(item)] = item } return result } func InverseMap[K, V comparable](m map[K]V) map[V]K { result := make(map[V]K, len(m)) for k, v := range m { result[v] = k } return result } var counter atomic.Int64 func nextID() int64 { return counter.Add(1) } type Enum interface { ~int String() string } type Color int const ( Red Color = iota Green Blue ) func (c Color) String() string { return [...]string{"red", "green", "blue"}[c] } func Must[T any](val T, err error) T { if err != nil { panic(err) } return val } type TransformFunc[T, U any] func(T) U func Chain[T, U, V any](f TransformFunc[T, U], g TransformFunc[U, V]) TransformFunc[T, V] { return func(t T) V { return g(f(t)) } } func zero[T any]() T { var zero T return zero } func Map[T, U any](items []T, fn func(T) U) []U { result := make([]U, len(items)) for i, item := range items { result[i] = fn(item) } return result } func Filter[T any](items []T, fn func(T) bool) []T { var result []T for _, item := range items { if fn(item) { result = append(result, item) } } return result } func Reduce[T, U any](items []T, init U, fn func(U, T) U) U { acc := init for _, item := range items { acc = fn(acc, item) } return acc } func init() { fmt.Println("initializing package main") }