mirror of
https://github.com/nabbar/golib.git
synced 2025-12-24 11:51:02 +08:00
- Rework for the management of mandatory components to qualify the global status. - Added qualification to components: "should", "must", "one of". - These qualifications will influence the overall state but not the unitary state of each component. Package Socket: - Creation package to open and listen local unix file socket - Allow to specify a handler who's needing a conn instance as entry - Create a client sub package to allow negociate with the local unix file socket Package Shell: - adding sub package for command and command collection Package Monitor: - add function to expose monitor command for shell Package Config: - add function to expose monitor command for shell Package Network: - Add "IP" protocol Pakcage Httpcli: - Rework the construction of the client - Add capability to specify proxy url Package Cobra: - add function to add flag to global command like verbose or config Package Log: - fix seg fault when calling a nil instance - remove println in hookfile / hooksyslog
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))