Skip to content

Exceptions для тех, кому не хватало их в golang

package main

import (
    "errors"
    "fmt"
)

func try(err error) {
    if err != nil {
        panic(err)
    }
}

func try1[T any](t T, err error) T {
    if err != nil {
        panic(err)
    }
    return t
}

func catch(f func()) (err error) {
    defer func() {
        if p := recover(); p != nil {
            if e, ok := p.(error); ok {
                err = e
            } else {
                err = fmt.Errorf("%#v", err)
            }
        }
    }()
    f()
    return nil
}

func fail() (int, error) {
    return 0, errors.New("LOL")
}

func main() {
    fmt.Println(catch(func() {
        fmt.Println(1 + try1(fail()))
    }))
}