Go custom data type
$ go get github.com/garavan/types-go
Import types-go to your go project
import types "github.com/garavan/types-go"
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{}
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"}
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"}
go test