mirror of
https://github.com/nabbar/golib.git
synced 2025-12-24 11:51:02 +08:00
- Add DNS Mapper to force destination for a fqdn source - Allow wildcard and multi wildcard for fqdn source - DNS Mapper create Transport, Dialer & http client - DNS Mapper allow a config input to customize timeout, limit and TLS config - DNS Mapper use a gloabl transport connection poller - DNS Mapper implement DialContext & Dial method for transport - DNS Mapper use cache to accelerate process - DNS Mapper cache is only dnsmapper, not DNS cache - Replace old helper for http client with DNSMapper - Add default DNSMapper into the main lib of http client - Allow to overide the default DNS Mapper with a new one - Add ticker to force clean idle connection every given duration - "Compatible" with old config, as the default config will be used instead of old client build - Clean code and fix minor bugs - Add config component to allow use a global config - Config Component httpcli can overide default httpcli dns mapper when updated Package Certificates - Add function type to impose function that return a slice of rootCA string - update config/component/tls by replacing mutex with atomic - optimize some code Package Config - expand errors code index to add component httpcli Package Config/component: - database: add new validation, that config key existing into viper - head: add new validation, that config key existing into viper - http: add new validation, that config key existing into viper - ldap: add new validation, that config key existing into viper - log: add new validation, that config key existing into viper - mail: add new validation, that config key existing into viper - smtp: add new validation, that config key existing into viper Package AWS: - update package following update of httpcli - use interface for http cli that implement the Do function - update following the config/component/aws - rework config/component/aws to use atomic instead of mutex - update test unit following change Package Request: - update following http client update - use interface of HTTP Client that implement DO function, instead of http client struct pointer - update config & code following - apply same modification into config/component/request - update config/component/request by replacing mutex to atomic Package Server - add function Uptime to model to expose the duration since last start Package Semaphore - apply change name of constant following bump of lib associated Package Crypt - fix bug into reader to remove suffix of EOF if prevent Package Errors: - expand index module to add DNS Mapper client Package HTTP Server: - update monitor to apply changes Package Socket: - add additional check if reading error: if buffer has data, send it to handler before break run Other: - 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))