Several weeks ago, I was asked to implement a “checker” that should check multiple errors (or conditions) at one time, once there is an error returned by one of the check, the whole check process should be terminated and returns the error (the first error).

Then after I wrote it in the project, I refactored it and published in github,

This package is quite simple,, it only got two functions:

NoError(ctx context.Context, checkPoints []CheckErrFunc) error
Passed(ctx context.Context, checkPoints []CheckFunc) bool

NoError tells you that the check points got no error, and Passed tells you all the checkpoints is passed.

And the check point functions are quite simple too:

type CheckErrFunc func() error
type CheckFunc func() bool

You can wrap your functions in these check functions, for example:

func checkSomething() bool{
	return myCheck(a,b,c,d) == nil

// or

func checkSomethingError() error{
	return myCheck(a,b,c,d)

// myCheck() only returns an error in this
// example, but you can still use more
// complicated functions as you want

This lib use empty channels to notify the caller by close the empty channel (in Passed), and its well tested. (at lease in my opinion.)

categories: dev
tags: go
comments powered by Disqus