Через errors.New("сообщение") или fmt.Errorf("формат", ...). Оба возвращают значение, реализующее интерфейс error (метод Error() string).
var ErrNotFound = errors.New("not found")
func Get(id int) (*Item, error) {
// ...
return nil, ErrNotFound
}
return fmt.Errorf("user %d not found", id)
В Go нет throw или исключений - ошибки возвращаются как значения. Кастомный тип ошибки: структура с методом Error() string.