null
is a library with reasonable options for dealing with nullable SQL and
JSON values.
Types in null
will only be considered null on null input, and will JSON
encode to null
.
All types implement sql.Scanner
and driver.Valuer
, so you can use this
library in place of sql.NullXXX
. All types also implement:
encoding.TextMarshaler
, encoding.TextUnmarshaler
, json.Marshaler
,
json.Unmarshaler
and sql.Scanner
.
Null used to be versioned with gopkg.in, so once you upgrade to v8 and beyond please stop using gopkg.in and ensure you're using go modules.
go get github.com/volatiletech/null/v9
The following are all types supported in this package. All types will marshal to JSON null if Invalid or SQL source data is null.
Type | Description | Notes |
---|---|---|
null.JSON |
Nullable []byte |
Will marshal to JSON null if Invalid. []byte{} input will not produce an Invalid JSON, but []byte(nil) will. This should be used for storing raw JSON in the database. Also has null.JSON.Marshal and null.JSON.Unmarshal helpers to marshal and unmarshal foreign objects. |
null.Bytes |
Nullable []byte |
[]byte{} input will not produce an Invalid Bytes, but []byte(nil) will. This should be used for storing binary data (bytes in PSQL for example) in the database. |
null.String |
Nullable string |
|
null.Byte |
Nullable byte |
|
null.Bool |
Nullable bool |
|
null.Time |
Nullable `time.Time | Marshals to JSON null if SQL source data is null. Uses time.Time 's marshaler. |
null.Float32 |
Nullable float32 |
|
null.Float64 |
Nullable float64 |
|
null.Int |
Nullable int |
|
null.Int8 |
Nullable int8 |
|
null.Int16 |
Nullable int16 |
|
null.Int32 |
Nullable int32 |
|
null.Int64 |
Nullable int64 |
|
null.Uint |
Nullable uint |
|
null.Uint8 |
Nullable uint8 |
|
null.Uint16 |
Nullable uint16 |
|
null.Uint32 |
Nullable uint32 |
|
null.Uint64 |
Nullable uint64 |
json
's ",omitempty"
struct tag does not work correctly right now. It will
never omit a null or empty String. This might be fixed
eventually.
BSD-3 (See License file)