Categorygithub.com/mcuadros/go-defaults
modulepackage
1.2.0
Repository: https://github.com/mcuadros/go-defaults.git
Documentation: pkg.go.dev

# README

go-defaults Build Status GoDoc GitHub release

Enabling stuctures with defaults values using struct tags.

Installation

The recommended way to install go-defaults

go get gopkg.in/mcuadros/go-defaults.v1

Examples

A basic example:

import (
    "fmt"
    "github.com/mcuadros/go-defaults"
    "time"
)

type ExampleBasic struct {
    Foo bool   `default:"true"` //<-- StructTag with a default key
    Bar string `default:"33"`
    Qux int8
    Dur time.Duration `default:"1m"`
}

func NewExampleBasic() *ExampleBasic {
    example := new(ExampleBasic)
    defaults.SetDefaults(example) //<-- This set the defaults values

    return example
}

...

test := NewExampleBasic()
fmt.Println(test.Foo) //Prints: true
fmt.Println(test.Bar) //Prints: 33
fmt.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 defaults
fmt.Println(example.Bar) //Prints: 0

License

MIT, see LICENSE

# Functions

No description provided by the author
GetTypeHash returns the TypeHash for a given reflect.Type.
Applies the default values to the struct object, the struct type must have the StructTag with name "default" and the directed value.

# Structs

No description provided by the author
Filler contains all the functions to fill any struct field with any type allowing to define function by Kind, Type of field name.

# Type aliases

No description provided by the author
TypeHash is a string representing a reflect.Type following the next pattern: <package.name>.<type.name>.