Skip to content

lycblank/defaults

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

defaults

Enabling struct with defaults values

Installation

The recommended way to install defaults

go get -u -v github.com/lycblank/defaults

Examples

Set the default value of the structure field through the structure tag

package main

import (
    "fmt"
    "github.com/lycblank/defaults"
)

func main() {
    car := &Car{}
    if err := defaults.Apply(car); err != nil {
        panic(err)
    }
    fmt.Printf("car:%+v\n", car) //Prints: car:&{Color:red Size:100 IsImport:true WheelRadius:1.01 SeatCount:4}
}

type Car struct {
    Color       string  `default:"red"`
    Size        int     `default:"100"`
    IsImport    bool    `default:"true"`
    WheelRadius float64 `default:"1.01"`
    SeatCount uint `default:"4"`
}

Set the default value of the structure through json parsing

package main

import (
    "fmt"
    "github.com/lycblank/defaults/json"
)

func main() {
    raw := `{}`
    car := &Car{}
    if err := json.Unmarshal([]byte(raw), car); err != nil {
        panic(err)
    }
    fmt.Printf("car:%+v\n", car) //Prints: car:&{Color:red Size:100 IsImport:true WheelRadius:1.01 SeatCount:4}
}

type Car struct {
    Color       string  `default:"red"`
    Size        int     `default:"100"`
    IsImport    bool    `default:"true"`
    WheelRadius float64 `default:"1.01"`
    SeatCount   uint    `default:"4"`
}

Access gin to support the default tag

package main

import (
    "fmt"
    "github.com/gin-gonic/gin/binding"
    "github.com/lycblank/defaults/validator"
)

func main() {
    validator := validator.NewStructValidatorWithDefault(binding.Validator)
    // Access gin to support the default tag
    // binding.Validator = validator.NewStructValidatorWithDefault(binding.Validator)
    carWithDefault := &CarWithDefault{}
    if err := validator.ValidateStruct(carWithDefault); err != nil {
        panic(err)
    }
    fmt.Printf("car:%+v\n", carWithDefault) //Prints: car:&{Color:red Size:100 IsImport:true WheelRadius:1.01 SeatCount:4}

    carWithoutDefault := &CarWithoutDefault{}
    if err := validator.ValidateStruct(carWithoutDefault); err != nil {
        panic(err) // panic: Key: 'CarWithoutDefault.Color' Error:Field validation for 'Color' failed on the 'required' tag
    }
}

type CarWithDefault struct {
    Color       string  `default:"red" binding:"required"`
    Size        int     `default:"100" binding:"required"`
    IsImport    bool    `default:"true" binding:"required"`
    WheelRadius float64 `default:"1.01" binding:"required"`
    SeatCount   uint    `default:"4" binding:"required"`
}

type CarWithoutDefault struct {
    Color       string  `binding:"required"`
    Size        int     `binding:"required"`
    IsImport    bool    `binding:"required"`
    WheelRadius float64 `binding:"required"`
    SeatCount   uint    `binding:"required"`
}

Set the default value of the map

package main

import (
    "fmt"
    "github.com/lycblank/defaults"
)

func main() {
    car := &Car{Wheels: map[string]*CarWheel{
        "1": {},
        "2": {},
        "3": {},
        "4": {Radius: 5},
    }}
    if err := defaults.Apply(car); err != nil {
        panic(err)
    }
    for k, v := range car.Wheels {
        fmt.Printf("%s=%+v\n", k, v)
        // Prints:
        //1=&{Color:black Radius:1.02}
        //2=&{Color:black Radius:1.02}
        //3=&{Color:black Radius:1.02}
        //4=&{Color:black Radius:5}
    }
}

type Car struct {
    Color     string               `default:"red"`
    Size      int                  `default:"100"`
    IsImport  bool                 `default:"true"`
    SeatCount uint                 `default:"4"`
    Wheels    map[string]*CarWheel // note: The value of the map needs to be a pointer type
}

type CarWheel struct {
    Color  string  `default:"black"`
    Radius float64 `default:"1.02"`
}

Caveats

A value of zero will be overwritten as the default value if the default tag is set.

License

MIT, see LICENSE

About

Set default value for zero value by tag

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages