Sobes.tech
Junior — Middle

Как се управляват изключенията и грешките във вашето приложение?

sobes.tech AI

Отговор от AI

В Go управлението на грешки се различава от много други езици, тъй като тук няма обичайните изключения. Вместо това, функциите обикновено връщат стойност на грешка (error) като втори резултат.

Основни подходи:

  • Проверка на грешката след извикване на функция:

    result, err := someFunction()
    if err != nil {
        // обработка на грешката
        log.Println("Грешка:", err)
        return err
    }
    // продължаване с result
    
  • Създаване на собствени типове грешки с помощта на errors.New или fmt.Errorf за по-информативни съобщения.

  • Паника (panic) и възстановяване (recover) се използват рядко, главно за критични грешки, които не трябва да се случват в нормалния поток.

  • Логиране на грешки и връщането им нагоре по стека за централизирана обработка.

Пример за обработка на грешка:

package main

import (
    "errors"
    "fmt"
)

func divide(a, b float64) (float64, error) {
    if b == 0 {
        return 0, errors.New("деление на нула")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Грешка:", err)
        return
    }
    fmt.Println("Резултат:", result)
}

По този начин, в Go, грешките се обработват явно, което повишава четливостта и надеждността на кода.