defaults

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 30, 2020 License: MIT Imports: 9 Imported by: 365

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

Documentation

Overview

This library allow to define a default value to any struct, this is made thanks to struct tags.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Factory added in v1.2.0

func Factory(variable interface{})

func SetDefaults

func SetDefaults(variable interface{})

Applies the default values to the struct object, the struct type must have the StructTag with name "default" and the directed value.

Usage

type ExampleBasic struct {
    Foo bool   `default:"true"`
    Bar string `default:"33"`
    Qux int8
    Dur time.Duration `default:"2m3s"`
}

 foo := &ExampleBasic{}
 SetDefaults(foo)

Types

type FieldData added in v1.2.0

type FieldData struct {
	Field    reflect.StructField
	Value    reflect.Value
	TagValue string
	Parent   *FieldData
}

type Filler added in v1.1.0

type Filler struct {
	FuncByName map[string]FillerFunc
	FuncByType map[TypeHash]FillerFunc
	FuncByKind map[reflect.Kind]FillerFunc
	Tag        string
}

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

func (*Filler) Fill added in v1.1.0

func (f *Filler) Fill(variable interface{})

Fill apply all the functions contained on Filler, setting all the possible values

func (*Filler) GetFieldsFromValue added in v1.2.0

func (f *Filler) GetFieldsFromValue(valueObject reflect.Value, parent *FieldData) []*FieldData

func (*Filler) SetDefaultValue added in v1.2.0

func (f *Filler) SetDefaultValue(field *FieldData)

func (*Filler) SetDefaultValues added in v1.2.0

func (f *Filler) SetDefaultValues(fields []*FieldData)

type FillerFunc added in v1.2.0

type FillerFunc func(field *FieldData)

type TypeHash added in v1.2.0

type TypeHash string

TypeHash is a string representing a reflect.Type following the next pattern: <package.name>.<type.name>

func GetTypeHash added in v1.2.0

func GetTypeHash(t reflect.Type) TypeHash

GetTypeHash returns the TypeHash for a given reflect.Type

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL