Как закрывать только текущую функцию?
Есть несколько функций. Допустим:
func Some1(w http.ResponseWriter, r *http.Request){
err:=Some2(w,r)
if err!=nil{
log.Println(err)
return
}
//some code
}
func Some2(w http.ResponseWriter, r *http.Request) error{
data, err:=io.ReadAll(r.Body)
if err!=nil{
return err
}
fmt.Println(string(data))
return nil
}
func Some3(w http.ResponseWriter, r *http.Request){
err:= Some2(w,r)
if err!=nil{
log.Println(err)
return
}
//some code
}
Как видно Some1 и Some3 делается одно и то же действие - проверяется ошибку и если она есть, то выводится и завершают функцию но не все программу.
А как можно сделать эту проверку и завершение одной функции с помощью како-нибудь обертки? Чтобы можно было вызвать эту обертку и функция из которой обертка запущена завершалась но при этом программа оставалась запущенной.
Грубо говоря, нужно сделать функцию EndFunction(err error), которая сделает return для вызвавшей ее функции. Вот это:
if err!=nil{
log.Println(err)
return
}
Запихнуть в отдельную функцию но чтобы return был для той которая эту функцию вызвала. Есть такие механизмы в го если понятно о чем я?
Ответы (1 шт):
Главное отличие ошибок в Go от механизма исключений в том, что вас заставляют явно их обрабатывать или игнорировать при каждом вызове функции. Кроме как с помощью panic в связки с recover вы никак не можете перепрыгнуть через несколько функций в call стеке. Т.е. такое:
чтобы return был для той которая эту функцию вызвала.
вряд ли возможно.