Skip to content

ramadani/types-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

types-go

Go custom data type

Installation

$ go get github.com/garavan/types-go

Usage

Import types-go to your go project

import types "github.com/garavan/types-go"

Date and Null Date

type User struct {
	Name        string   `json:"name"`
	Dob         types.Date     `json:"dob"`
	DeletedDate types.NullDate `json:"deleted_date"`
}

Marshalling json

dobTime, _ := time.Parse("2006-01-02", "1990-06-03")
eko := User{
	Name:        "Eko Syamsudin",
	Dob:         types.Date{Time: dobTime},
	DeletedDate: types.NullDate{Time: time.Now(), Valid: true},
}

bytes, _ := json.Marshal(&eko)

// json:
// {"name":"Eko Syamsudin","dob":"1990-06-03" "deleted_date":"2019-08-19"}

if deleted date is null

dobTime, _ := time.Parse("2006-01-02", "1990-06-03")
eko := User{
	Name:        "Eko Syamsudin",
	Dob:         types.Date{Time: dobTime},
	DeletedDate: types.NullDate{},
}

bytes, _ := json.Marshal(&eko)

// json:
// {"name":"Eko Syamsudin","dob":"1990-06-03" "deleted_date":"null"}

Unmarshalling json

dani := User{}
err := json.Unmarshal([]byte("{\"name\":\"Ramadani\",\"dob\":\"1992-07-25\"}"), &dani)

// dani.DeletedDate is equal NullDate{}

Gender

type User struct {
	Name   string `json:"name"`
	Gender types.Gender `json:"gender"`
}
eko := User{
	Name:   "Eko Syamsudin",
	Gender: types.Male,
}

bytes, _ := json.Marshal(&eko)
log.Println(string(bytes))

// json:
// {"name":"Eko Syamsudin","gender":"M"}

Null Gender

type User struct {
	Name   string `json:"name"`
	Gender types.NullGender `json:"gender"`
}
eko := User{
	Name:   "Eko Syamsudin",
	Gender: types.NullGender{},
}

bytes, _ := json.Marshal(&eko)
log.Println(string(bytes))

// json:
// {"name":"Eko Syamsudin","gender":"null"}

Tests

go test