Найти в Дзене
2020 подписчиков

✔️ [Golang] Ошибки, которые нельзя обработать


Паника в горутине

Если мы в обработчике будем использовать горутину, которая по каким-то причинам вызвала панику, Golang не сможет обработать эту панику и приложение упадет с ошибкой и все запросы, которые сейчас обрабатывает сервис оборвутся.

Eсли написать примерно вот такой код

type User struct {

Email string

}

func UpsertUser(r *http.Request) (User, error) {

return User{}, nil

}

func SendEmail(u User) {

panic("sending email is not implemented")

}

func CreateUser(w http.ResponseWriter, r *http.Request) {

user, err := UpsertUser(r)

if err != nil {

// handling error

}

go func() {

SendEmail(user)

// may be something else

}()

}

То при вызове функции CreateUser сервис упадет.

Для того, что бы исправить это, нужно обрабатывать паники в каждой горутине


✔️ [Golang] Ошибки, которые нельзя обработать Паника в горутине Если мы в обработчике будем использовать горутину, которая по каким-то причинам вызвала панику, Golang не сможет обработать эту панику и
Около минуты