mirror of
https://github.com/nabbar/golib.git
synced 2025-09-26 20:01:15 +08:00

- fix bug with cert type marshall/unmarshall - add old config to allow retro compatibility - add new type function to retrieve a tls root ca cert instead of a slice of string to get root ca Package HTTPCli: - fix default DNS Mapper - optimze global DNS Mapper - fix non closing sub goroutine Package HTTPCli/DNS-Mapper: - change request function of Root CA with function of root ca cert instance - add function to return a root ca cert from a function that return a slice of root ca string Package Config/Components: - httpcli: bump sub package of certificate, httpcli - httpcli: adjust code following bump - httpcli: change request function of Root CA with function of root ca cert instance - httpcli: add function to return a root ca cert from a function that return a slice of root ca string - tls: change request function of Root CA with function of root ca cert instance - tls: add function to return a root ca cert from a function that return a slice of root ca string Package IOUtils/mapCloser: - fix bug with mapcloser not stopped - optimize code & goroutine Package Logger: - rework mapCloser call - optimize mapClaoser managment Package Request: - rework error managment - using []byte instead of buffer to read response body - add free capability - optimize memory consumption Package Socket / Server: - add filtering error capability - add params to specify a function called on each new connection and before using the connection - the new function param allow to update the network incomming connection (like buffer, deadline...) - rework some useless atomic to direct value to optimize code Package Socket/Delim: - rework to optimize memory & variable use - remove capabilities of update the instance when running, prefert recreate new one if necessary Other: - bump dependencies - minor bug / fix
retro
retro
is a golib Golang sub-package designed to support backward-compatible models through semantic versioning. It introduces a new struct field tag, retro
, which manages the serialization and deserialization of model fields based on specified versions.
retro
works with json
, yaml
, and toml
formats and dynamically marshals or unmarshals model data according to the version in use.
Key Features
- The
retro:"default"
tag indicates which fields should be considered when no version is specified. - Fields without the
retro
tag but with format tags (likejson
,yaml
, ortoml
), and withoutomitempty
, will be included in all versions. retro
supports logical operators like>
,<
,>=
, and<=
in version constraints, allowing fine-grained control over when fields should be included or excluded based on the version.retro
intelligently handles conflicting version definitions, such asretro:">v1.0.0,>v1.0.3"
, ensuring valid behavior and in case on conflicts or any wrong retro tag definition the field will be ignored in the serialization and deserialization.- Versioning exceptions can be managed as well. For example,
retro:">v1.0.0,v0.0.3"
will include the field even ifv0.0.3
doesn’t meet the condition>v1.0.0
due to the explicit exception. retro
allows easily to activate the standard serialization deserialization for your model and to work only with the standard methodologies if needed bypassingretro
features.
Additionally, retro
respects custom marshal/unmarshal behavior defined for fields in the json
, yaml
, and toml
formats, ensuring seamless integration with your model's existing logic.
Examples and use cases
The retro_test.go file contains real world scenarios and examples on the retro features and usage.