On 01/12/2014 09:12, Marvin Humphrey wrote:
On Mon, Nov 17, 2014 at 1:12 PM, Marvin Humphrey <[email protected]> wrote:

*   Clownfish exception handling has been implemented using Go's
     panic/recover/defer.

A THROW in Clownfish C code triggers a Go `panic`.  The argument to `panic` is
the Err object, which implements the Go `error` interface.

This makes it possible to trap an error in a Clownfish C code from Go-space,
using Go's `recover`.

Unfortunately some Clownfish exceptions will still leak memory.  (Too bad C
doesn't have Go's `defer` facility!)

*   Idiomatic Go error handling is achieved by trapping exceptions in
     user-level method wrappers and returning an `error` alongside any return
     value.

In keeping with Go traditions, we report errors using a multi-valued return
and avoid throwing exceptions that the user would be expected to catch.  This
means that autogenerated top-level method bindings will have to trap
exceptions.

     hits, err := searcher.Hits(query, 0, 10, nil)
     if err != nil {
         log.Fatal(err) // or return nil, whatever.
     }

(It might be easier to achieve such functionality if Clownfish methods
declared their "throws" -- then CFC would know which exceptions to trap and
which to let through.)

Looks very nice!

Nick

Reply via email to