Sobes.tech
Junior — Middle

Можеш ли да споделиш пример как си реализирал обработката на грешки с помощта на error.Group в проектите си?

sobes.tech AI

Отговор от AI

В пакета errors на Go с типа Group (например, от golang.org/x/sync/errgroup) е лесно да събирате и обработвате множество грешки, възникващи в паралелни goroutines.

Пример за използване на errgroup.Group за паралелно изпълнение на задачи с обработка на грешки:

import (
    "fmt"
    "golang.org/x/sync/errgroup"
)

func processTasks() error {
    var g errgroup.Group

    задачи := []func() error{
        func() error { /* задача 1 */ return nil },
        func() error { /* задача 2 */ return fmt.Errorf("грешка в задача 2") },
        func() error { /* задача 3 */ return nil },
    }

    for _, задача := range задачи {
        z := задача
        g.Go(func() error {
            return z()
        })
    }

    if err := g.Wait(); err != nil {
        // Обработка на първата срещната грешка
        return err
    }
    return nil
}

В проектите си използвах errgroup за стартиране на няколко независими операции паралелно и за събиране на грешки по организиран начин, което опростява кода и подобрява четимостта.