Functions, Multiple Returns & Closures

Returning (result, error), named results, variadic functions and functions as values.

Go functions can return several values, which is how errors are reported: (result, error). Functions are values too, so they can be passed around, returned and closed over.

Functions

divide returns a value and an error; the caller checks err != nil.

minMax uses named results and a bare return; min and max are built in since Go 1.21.

sum(nums ...int) accepts any number of ints; sum(slice...) passes a slice.

counter returns a closure that keeps its own count between calls.

apply takes a function parameter.

result, _:= divide(a, b) // ignoring the error result, err:= divide(a, b) if err != nil { return err }

Discarding errors with _ hides failures. Check and handle (or return) every error.

How do Go functions report errors?

By returning an error as the last result; nil means success. Callers check it immediately.