mirror of
https://github.com/nabbar/golib.git
synced 2025-10-11 10:40:05 +08:00

- Add interface Errors to expose func for collection of errors Package Server: - Add runner packages for start/stop & ticker process launch in goroutines - Runner Start/Stop : register a start and a stop function called into a managment instance of goroutines, expose package Server interface - Runner Ticker : register a func periodycly called into a managment instance of goroutine with a time ticker, expose package server interface - Add tools function to run x times a function or periodicly with a check function Package HttpServer: - Remove old run managment instance and use new Start&Stop Runner instead self runner - Replace the poller in server start / stop with package server tools function - Adjust code following this change - Add in healthcheck a test of dialing to server binding network to perform the healthcheck - Remove WaitNotify funct (cannot having multiple of waitnotify in same app) : keep waitnotify function in package config Package Monitor: - Remove old running system to use package server/runner/ticker - Adjust code following Package Cobra : - Fix minor bug with writing configure - Optimize code Bump dependencies
Error package
This package allows extending go error interface to add parent tree, code of error, trace, ... This package still compatible with error interface and can be customized to define what information is return for standard go error implementation.
The main mind of this package is to be simple use, quickly implement and having more capabilities than go error interface
Example of implement
You will find many uses of this package in the golib
repos.
We will create an error.go
file into any package, and we will construct it like this :
import errors "github.com/nabbar/golib/errors"
const (
// create const for code as type CodeError to use features func
// we init the iota number to an minimal free code
// golib/errors expose the minimal available iota with const : errors.MIN_AVAILABLE
// with this method, all code uint will be predictable
EMPTY_PARAMS errors.CodeError = iota + errors.MIN_AVAILABLE
MY_ERROR
// add here all const you will use as code to identify error with code & message
)
func init() {
// register your function getMessage
errors.RegisterFctMessage(getMessage)
}
// This function will return the message of one error code
func getMessage(code errors.CodeError) (message string) {
switch code {
case EMPTY_PARAMS:
return "given parameters is empty"
case My_ERROR:
return "example of message for code MY_ERROR"
}
// CAREFUL : the default return if code is not found must be en empty string !
return ""
}
In go source file, we can implement the call to package golib/errors
like this :
// will test if err is not nil
// if is nil, will return nil, otherwise will return a Error interface from the MY_ERROR code with a parent err
_ = MY_ERROR.Iferror(err)
// return an Error interface from the MY_ERROR code and if err is not nil, add a parent err
_ = MY_ERROR.ErrorParent(err)
// error can be cascaded add like this
_ = MY_ERROR.IfError(EMPTY_PARAMS.IfError(err))
return MY_ERROR.Error(EMPTY_PARAMS.ErrorParent(err))