You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Enabling stuctures with defaults values using struct tags.
Installation
The recommended way to install go-defaults
go get github.com/mcuadros/go-defaults
Examples
A basic example:
import (
"fmt""github.com/mcuadros/go-defaults""time"
)
typeExampleBasicstruct {
Foobool`default:"carview.php?tsp=true"`//<-- StructTag with a default keyBarstring`default:"33"`Quxint8Dur time.Duration`default:"1m"`
}
funcNewExampleBasic() *ExampleBasic {
example:=new(ExampleBasic)
defaults.SetDefaults(example) //<-- This set the defaults valuesreturnexample
}
...test:=NewExampleBasic()
fmt.Println(test.Foo) //Prints: truefmt.Println(test.Bar) //Prints: 33fmt.Println(test.Qux) //Prints:fmt.Println(test.Dur) //Prints: 1m0s
Caveats
At the moment, the way the default filler checks whether it should fill a struct field or not is by comparing the current field value with the corresponding zero value of that type. This has a subtle implication: the zero value set explicitly by you will get overriden by default value during SetDefaults() call. So if you need to set the field to container zero value, you need to set it explicitly AFTER setting the defaults.
Take the basic example in the above section and change it slightly:
example:=ExampleBasic{
Bar: 0,
}
defaults.SetDefaults(example)
fmt.Println(example.Bar) //Prints: 33 instead of 0 (which is zero value for int)example.Bar=0// set needed zero value AFTER applying defaultsfmt.Println(example.Bar) //Prints: 0