Was thinking a bit about what you said yesterday around using values as exceptions, and think I misunderstood your point.
That post was around Go's handling of errors. They encode an error or exception as a second return value from a function (effectively a tuple). I.e. the function:
func Open(name string) (file *File, err error)returns an error as it's 2nd return value. You then capture that at the calling site: