Go Errors

In Go, errors are represented by values of the built-in error interface type. The error type is defined as follows:

refer ‮igi:ot‬ftidea.com
type error interface {
    Error() string
}

Any type that has an Error() method that returns a string can be used as an error in Go.

Here's an example of how to define and use custom errors in Go:

type MyError struct {
    message string
}

func (e *MyError) Error() string {
    return e.message
}

func doSomething() error {
    return &MyError{"something went wrong"}
}

func main() {
    err := doSomething()
    if err != nil {
        fmt.Println("Error:", err)
    }
}

In this example, we define a custom error type MyError, which has a message field and an Error() method that returns the value of the message field. We then define a function doSomething() that returns an error of type MyError if something goes wrong. Finally, in the main() function, we call doSomething() and check for errors using the != nil syntax. If an error occurs, we print the error message to the console.

In addition to custom errors, Go provides a built-in errors.New() function for creating errors with a custom error message:

func doSomething() error {
    return errors.New("something went wrong")
}

This will return an error of type *errors.errorString, which implements the error interface with the given error message as the string representation of the error.

Go also provides a panic() function for handling exceptional situations, which is similar to throwing an exception in other programming languages. When a panic() occurs, the program will stop executing and print a stack trace of the error. It's generally recommended to use errors for normal error handling and panics for exceptional situations.

func doSomething() {
    panic("something went horribly wrong")
}

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println("Panic:", err)
        }
    }()
    doSomething()
}

In this example, we define a function doSomething() that panics with a custom error message. In the main() function, we use a defer statement to recover from the panic and print the error message to the console. The recover() function returns the error message that was passed to the panic() function.