Go Home Page
The Go Programming Language

Package exception

import "exp/exception"

This package illustrates how basic try-catch exception handling can be emulated using goroutines, channels, and closures.

This package is *not* intended as a general exception handler library.

Package files

exception.go

type Exception

An Exception carries an exception value.

type Exception struct {
    Value interface{} // Value may be the nil exception
}

func Try

func Try(f func(throw Handler)) *Exception

Try invokes a function f with a Handler to throw exceptions. The function f may terminate abnormally with an arbitrary exception x by calling throw(x) within f. If an exception is thrown, Try returns an *Exception; otherwise it returns nil.

Usage pattern:

if x := exception.Try(func(throw exception.Handler) {
	...
	throw(42);  // terminate f by throwing exception 42
	...
}); x != nil {
	// catch exception, e.g. print it
	fmt.Println(x.Value);
}

Alternative:

exception.Try(func(throw exception.Handler) {
	...
	throw(42);  // terminate f by throwing exception 42
	...
}).Catch(func (x interface{}) {
	// catch exception, e.g. print it
	fmt.Println(x);
})

func (*Exception) Catch

func (x *Exception) Catch(f Handler)

If x != nil, Catch invokes f with the exception value x.Value. See Try for usage patterns.

func (*Exception) String

func (x *Exception) String() string

type Handler

A Handler function handles an arbitrary exception value x.

type Handler func(x interface{})