• Stars
    star
    274
  • Rank 150,274 (Top 3 %)
  • Language
    Go
  • License
    MIT License
  • Created almost 11 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Go structures with default values using tags

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 github.com/mcuadros/go-defaults

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

More Repositories

1

ofelia

A docker job scheduler (aka. crontab for docker)
Go
3,002
star
2

go-syslog

Syslog server library for go.
Go
513
star
3

go-candyjs

fully transparent bridge between Go and the JavaScript
Go
455
star
4

dockership

dead simple docker deploy tool
Go
302
star
5

OctoPrint-TFT

A OctoPrint touch interface for TFT touch modules based on GTK+3
Go
171
star
6

go-version

Version normalizer and comparison library for go
Go
136
star
7

go-jsonschema-generator

json-schemas generator based on Go types
Go
118
star
8

ascode

AsCode - Terraform Alternative Syntax
Go
111
star
9

homebrew-hhvm

HHVM repository for Homebrew
Ruby
103
star
10

go-rpi-rgb-led-matrix

Go binding for rpi-rgb-led-matrix an excellent C++ library to control RGB LED displays with Raspberry Pi GPIO.
Go
83
star
11

pynats

[Abandoned] A Python client for the NATS messaging system.
Python
75
star
12

gce-docker

Google Cloud Engine integration for Docker
Go
59
star
13

go-rpi-ws281x

Go bindings for Raspberry Pi PWM library for WS281X LEDs
Go
41
star
14

go-lookup

Small library on top of reflect for make lookups to any Structs or Maps
Go
36
star
15

go-monitor

a simple and extensible way to build monitorizable go process via HTTP.
Go
32
star
16

rocketizer

[Abandoned] Painless Dockerfile transformation to Rocket containers
Go
28
star
17

go-stable

Golang fixed versions tool for your private and public dependencies
Go
23
star
18

passage

SSH tunnels on steroids
Go
22
star
19

go-crxmake

CRX Package generator
Go
19
star
20

currency-detector

Class to detect the currency from any string
PHP
19
star
21

go-rat

tar extension for random access
Go
19
star
22

php-cayley

PHP wrapper of the Google's Cayley graph database REST interface
PHP
18
star
23

go-octoprint

Go library for accessing the OctoPrint's REST API
Go
17
star
24

go-composer

Basic replacement of Composer, the Dependency Manager for PHP
Go
16
star
25

harvester

Harvesterd is a low footprint collector and parser for events and logs
Go
12
star
26

fabric-composer

Deploy system for PHP composer based projects made with Fabric
Python
11
star
27

silex-hateoas

A RESTful example based on Hateoas and Silex
PHP
8
star
28

lemondb

Extensible MongoDB proxy
Go
8
star
29

go-git-aerospike

Example of go-git backed by a Aerospike
Go
7
star
30

go-raa

fast random access filesystem archive
Go
5
star
31

pimple-hack

A Pimple version in Hack/HHVM, just for fun!
PHP
4
star
32

python-solid-example

Simple example implementing SOLID principles with Python
Python
4
star
33

go-etcd-hydrator

Go
4
star
34

bson-hni

C++
3
star
35

pgwire

Go
3
star
36

ansi-slides

Slide with ANSI style!
PHP
3
star
37

go-time-aggregator

Go
3
star
38

bson-php-cpp

Libbson + PHP-CPP
C++
2
star
39

go-personal

A tiny library to score strings as fullnames or emails.
Go
2
star
40

go-mgo-cache

MongoDB interface for a Go cache
Go
2
star
41

dotfiles

Coming back to Linux! My new config files.
C
2
star
42

golang-arm

Docker Image packaging for golang for ARM platforms.
Shell
2
star
43

dockership-site

Dockership documentation
HTML
1
star
44

natstress

A stress tool for NATS Servers
Go
1
star
45

yCrawler

PHP
1
star
46

cli-array-editor

This class provides an easy way to edit arrays in CLI using vim or your preferred editor.
PHP
1
star
47

statsd-ducksboard-backend

A StatsD backend that sends metrics to Ducksboard
JavaScript
1
star
48

docker-arm

Dockerfiles for ARM
Shell
1
star
49

presentations

Repository of presentations
1
star
50

go-bson-schema

Go
1
star