Программирование

Упрощаем обработку ошибок на Go

Известно, что в Golang работать с ошибками и так достаточно просто. Однако может образоваться код такого вида:

func main() {
    app := newApp()

    err = app.func1()
    if err != nil {
        log.Fatalln(err)
    }

    err = app.func2()
    if err != nil {
        log.Fatalln(err)
    }

    err = app.func3()
    if err != nil {
        log.Fatalln(err)
    }
}

Рано или поздно, надоест, что обработка ошибок занимает лишнее место. Хотелось бы это как-то ужать, уменьшить по размеру и вообще выкинуть проверку каждый раз после вызова. Я придумал простое решение. Пишем такую helper-функцию:

type errorFunc func() error

func checkErrors(errChecks ...errorFunc) error {
	for _, errFunc := range errChecks {
		err := errFunc()
		if err != nil {
			return err
		}
	}
	return nil
}

И передаем в нее все наши функции, которые возвращают только ошибку. Пока по простому, без аргументов в функциях. Тогда код сокращается до:

func main() {
    app := newApp()

    err := checkErrors(
        app.func1,
        app.func2,
        app.func3,
    )
    if err != nil {
        log.Fatalln(err)
    }
}

И наш лаконичный язык становится еще более кратким.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *