README

null GoDoc CircleCI

import "gopkg.in/guregu/null.v4"

null is a library with reasonable options for dealing with nullable SQL and JSON values

There are two packages: null and its subpackage zero.

Types in null will only be considered null on null input, and will JSON encode to null. If you need zero and null be considered separate values, use these.

Types in zero are treated like zero values in Go: blank string input will produce a null zero.String, and null Strings will JSON encode to "". Zero values of these types will be considered null to SQL. If you need zero and null treated the same, use these.

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, and json.Unmarshaler.

null package

import "gopkg.in/guregu/null.v3"

null.String

Nullable string.

Marshals to JSON null if SQL source data is null. Zero (blank) input will not produce a null String. Can unmarshal from sql.NullString JSON input or string input.

null.Int

Nullable int64.

Marshals to JSON null if SQL source data is null. Zero input will not produce a null Int. Can unmarshal from sql.NullInt64 JSON input.

null.Float

Nullable float64.

Marshals to JSON null if SQL source data is null. Zero input will not produce a null Float. Can unmarshal from sql.NullFloat64 JSON input.

null.Bool

Nullable bool.

Marshals to JSON null if SQL source data is null. False input will not produce a null Bool. Can unmarshal from sql.NullBool JSON input.

null.Time

Marshals to JSON null if SQL source data is null. Uses time.Time's marshaler. Can unmarshal from pq.NullTime and similar JSON input.

zero package

import "gopkg.in/guregu/null.v3/zero"

zero.String

Nullable string.

Will marshal to a blank string if null. Blank string input produces a null String. Null values and zero values are considered equivalent. Can unmarshal from sql.NullString JSON input.

zero.Int

Nullable int64.

Will marshal to 0 if null. 0 produces a null Int. Null values and zero values are considered equivalent. Can unmarshal from sql.NullInt64 JSON input.

zero.Float

Nullable float64.

Will marshal to 0 if null. 0.0 produces a null Float. Null values and zero values are considered equivalent. Can unmarshal from sql.NullFloat64 JSON input.

zero.Bool

Nullable bool.

Will marshal to false if null. false produces a null Float. Null values and zero values are considered equivalent. Can unmarshal from sql.NullBool JSON input.

zero.Time

Will marshal to the zero time if null. Uses time.Time's marshaler. Can unmarshal from pq.NullTime and similar JSON input.

Bugs

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.

License

BSD

Documentation

Overview

    Package null contains SQL types that consider zero input and null input as separate values, with convenient support for JSON and text marshaling. Types in this package will always encode to their null value if null. Use the zero subpackage if you want zero values and null to be treated the same.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    This section is empty.

    Types

    type Bool

    type Bool struct {
    	sql.NullBool
    }

      Bool is a nullable bool. It does not consider false values to be null. It will decode to null, not false, if null.

      func BoolFrom

      func BoolFrom(b bool) Bool

        BoolFrom creates a new Bool that will always be valid.

        func BoolFromPtr

        func BoolFromPtr(b *bool) Bool

          BoolFromPtr creates a new Bool that will be null if f is nil.

          func NewBool

          func NewBool(b bool, valid bool) Bool

            NewBool creates a new Bool

            func (Bool) Equal

            func (b Bool) Equal(other Bool) bool

              Equal returns true if both booleans have the same value or are both null.

              func (Bool) IsZero

              func (b Bool) IsZero() bool

                IsZero returns true for invalid Bools, for future omitempty support (Go 1.4?) A non-null Bool with a 0 value will not be considered zero.

                func (Bool) MarshalJSON

                func (b Bool) MarshalJSON() ([]byte, error)

                  MarshalJSON implements json.Marshaler. It will encode null if this Bool is null.

                  func (Bool) MarshalText

                  func (b Bool) MarshalText() ([]byte, error)

                    MarshalText implements encoding.TextMarshaler. It will encode a blank string if this Bool is null.

                    func (Bool) Ptr

                    func (b Bool) Ptr() *bool

                      Ptr returns a pointer to this Bool's value, or a nil pointer if this Bool is null.

                      func (*Bool) SetValid

                      func (b *Bool) SetValid(v bool)

                        SetValid changes this Bool's value and also sets it to be non-null.

                        func (*Bool) UnmarshalJSON

                        func (b *Bool) UnmarshalJSON(data []byte) error

                          UnmarshalJSON implements json.Unmarshaler. It supports number and null input. 0 will not be considered a null Bool.

                          func (*Bool) UnmarshalText

                          func (b *Bool) UnmarshalText(text []byte) error

                            UnmarshalText implements encoding.TextUnmarshaler. It will unmarshal to a null Bool if the input is blank. It will return an error if the input is not an integer, blank, or "null".

                            func (Bool) ValueOrZero

                            func (b Bool) ValueOrZero() bool

                              ValueOrZero returns the inner value if valid, otherwise false.

                              type Float

                              type Float struct {
                              	sql.NullFloat64
                              }

                                Float is a nullable float64. It does not consider zero values to be null. It will decode to null, not zero, if null.

                                func FloatFrom

                                func FloatFrom(f float64) Float

                                  FloatFrom creates a new Float that will always be valid.

                                  func FloatFromPtr

                                  func FloatFromPtr(f *float64) Float

                                    FloatFromPtr creates a new Float that be null if f is nil.

                                    func NewFloat

                                    func NewFloat(f float64, valid bool) Float

                                      NewFloat creates a new Float

                                      func (Float) Equal

                                      func (f Float) Equal(other Float) bool

                                        Equal returns true if both floats have the same value or are both null. Warning: calculations using floating point numbers can result in different ways the numbers are stored in memory. Therefore, this function is not suitable to compare the result of a calculation. Use this method only to check if the value has changed in comparison to some previous value.

                                        func (Float) IsZero

                                        func (f Float) IsZero() bool

                                          IsZero returns true for invalid Floats, for future omitempty support (Go 1.4?) A non-null Float with a 0 value will not be considered zero.

                                          func (Float) MarshalJSON

                                          func (f Float) MarshalJSON() ([]byte, error)

                                            MarshalJSON implements json.Marshaler. It will encode null if this Float is null.

                                            func (Float) MarshalText

                                            func (f Float) MarshalText() ([]byte, error)

                                              MarshalText implements encoding.TextMarshaler. It will encode a blank string if this Float is null.

                                              func (Float) Ptr

                                              func (f Float) Ptr() *float64

                                                Ptr returns a pointer to this Float's value, or a nil pointer if this Float is null.

                                                func (*Float) SetValid

                                                func (f *Float) SetValid(n float64)

                                                  SetValid changes this Float's value and also sets it to be non-null.

                                                  func (*Float) UnmarshalJSON

                                                  func (f *Float) UnmarshalJSON(data []byte) error

                                                    UnmarshalJSON implements json.Unmarshaler. It supports number and null input. 0 will not be considered a null Float.

                                                    func (*Float) UnmarshalText

                                                    func (f *Float) UnmarshalText(text []byte) error

                                                      UnmarshalText implements encoding.TextUnmarshaler. It will unmarshal to a null Float if the input is blank. It will return an error if the input is not an integer, blank, or "null".

                                                      func (Float) ValueOrZero

                                                      func (f Float) ValueOrZero() float64

                                                        ValueOrZero returns the inner value if valid, otherwise zero.

                                                        type Int

                                                        type Int struct {
                                                        	sql.NullInt64
                                                        }

                                                          Int is an nullable int64. It does not consider zero values to be null. It will decode to null, not zero, if null.

                                                          func IntFrom

                                                          func IntFrom(i int64) Int

                                                            IntFrom creates a new Int that will always be valid.

                                                            func IntFromPtr

                                                            func IntFromPtr(i *int64) Int

                                                              IntFromPtr creates a new Int that be null if i is nil.

                                                              func NewInt

                                                              func NewInt(i int64, valid bool) Int

                                                                NewInt creates a new Int

                                                                func (Int) Equal

                                                                func (i Int) Equal(other Int) bool

                                                                  Equal returns true if both ints have the same value or are both null.

                                                                  func (Int) IsZero

                                                                  func (i Int) IsZero() bool

                                                                    IsZero returns true for invalid Ints, for future omitempty support (Go 1.4?) A non-null Int with a 0 value will not be considered zero.

                                                                    func (Int) MarshalJSON

                                                                    func (i Int) MarshalJSON() ([]byte, error)

                                                                      MarshalJSON implements json.Marshaler. It will encode null if this Int is null.

                                                                      func (Int) MarshalText

                                                                      func (i Int) MarshalText() ([]byte, error)

                                                                        MarshalText implements encoding.TextMarshaler. It will encode a blank string if this Int is null.

                                                                        func (Int) Ptr

                                                                        func (i Int) Ptr() *int64

                                                                          Ptr returns a pointer to this Int's value, or a nil pointer if this Int is null.

                                                                          func (*Int) SetValid

                                                                          func (i *Int) SetValid(n int64)

                                                                            SetValid changes this Int's value and also sets it to be non-null.

                                                                            func (*Int) UnmarshalJSON

                                                                            func (i *Int) UnmarshalJSON(data []byte) error

                                                                              UnmarshalJSON implements json.Unmarshaler. It supports number, string, and null input. 0 will not be considered a null Int.

                                                                              func (*Int) UnmarshalText

                                                                              func (i *Int) UnmarshalText(text []byte) error

                                                                                UnmarshalText implements encoding.TextUnmarshaler. It will unmarshal to a null Int if the input is blank. It will return an error if the input is not an integer, blank, or "null".

                                                                                func (Int) ValueOrZero

                                                                                func (i Int) ValueOrZero() int64

                                                                                  ValueOrZero returns the inner value if valid, otherwise zero.

                                                                                  type String

                                                                                  type String struct {
                                                                                  	sql.NullString
                                                                                  }

                                                                                    String is a nullable string. It supports SQL and JSON serialization. It will marshal to null if null. Blank string input will be considered null.

                                                                                    func NewString

                                                                                    func NewString(s string, valid bool) String

                                                                                      NewString creates a new String

                                                                                      func StringFrom

                                                                                      func StringFrom(s string) String

                                                                                        StringFrom creates a new String that will never be blank.

                                                                                        func StringFromPtr

                                                                                        func StringFromPtr(s *string) String

                                                                                          StringFromPtr creates a new String that be null if s is nil.

                                                                                          func (String) Equal

                                                                                          func (s String) Equal(other String) bool

                                                                                            Equal returns true if both strings have the same value or are both null.

                                                                                            func (String) IsZero

                                                                                            func (s String) IsZero() bool

                                                                                              IsZero returns true for null strings, for potential future omitempty support.

                                                                                              func (String) MarshalJSON

                                                                                              func (s String) MarshalJSON() ([]byte, error)

                                                                                                MarshalJSON implements json.Marshaler. It will encode null if this String is null.

                                                                                                func (String) MarshalText

                                                                                                func (s String) MarshalText() ([]byte, error)

                                                                                                  MarshalText implements encoding.TextMarshaler. It will encode a blank string when this String is null.

                                                                                                  func (String) Ptr

                                                                                                  func (s String) Ptr() *string

                                                                                                    Ptr returns a pointer to this String's value, or a nil pointer if this String is null.

                                                                                                    func (*String) SetValid

                                                                                                    func (s *String) SetValid(v string)

                                                                                                      SetValid changes this String's value and also sets it to be non-null.

                                                                                                      func (*String) UnmarshalJSON

                                                                                                      func (s *String) UnmarshalJSON(data []byte) error

                                                                                                        UnmarshalJSON implements json.Unmarshaler. It supports string and null input. Blank string input does not produce a null String.

                                                                                                        func (*String) UnmarshalText

                                                                                                        func (s *String) UnmarshalText(text []byte) error

                                                                                                          UnmarshalText implements encoding.TextUnmarshaler. It will unmarshal to a null String if the input is a blank string.

                                                                                                          func (String) ValueOrZero

                                                                                                          func (s String) ValueOrZero() string

                                                                                                            ValueOrZero returns the inner value if valid, otherwise zero.

                                                                                                            type Time

                                                                                                            type Time struct {
                                                                                                            	sql.NullTime
                                                                                                            }

                                                                                                              Time is a nullable time.Time. It supports SQL and JSON serialization. It will marshal to null if null.

                                                                                                              func NewTime

                                                                                                              func NewTime(t time.Time, valid bool) Time

                                                                                                                NewTime creates a new Time.

                                                                                                                func TimeFrom

                                                                                                                func TimeFrom(t time.Time) Time

                                                                                                                  TimeFrom creates a new Time that will always be valid.

                                                                                                                  func TimeFromPtr

                                                                                                                  func TimeFromPtr(t *time.Time) Time

                                                                                                                    TimeFromPtr creates a new Time that will be null if t is nil.

                                                                                                                    func (Time) Equal

                                                                                                                    func (t Time) Equal(other Time) bool

                                                                                                                      Equal returns true if both Time objects encode the same time or are both null. Two times can be equal even if they are in different locations. For example, 6:00 +0200 CEST and 4:00 UTC are Equal.

                                                                                                                      func (Time) ExactEqual

                                                                                                                      func (t Time) ExactEqual(other Time) bool

                                                                                                                        ExactEqual returns true if both Time objects are equal or both null. ExactEqual returns false for times that are in different locations or have a different monotonic clock reading.

                                                                                                                        func (Time) IsZero

                                                                                                                        func (t Time) IsZero() bool

                                                                                                                          IsZero returns true for invalid Times, hopefully for future omitempty support. A non-null Time with a zero value will not be considered zero.

                                                                                                                          func (Time) MarshalJSON

                                                                                                                          func (t Time) MarshalJSON() ([]byte, error)

                                                                                                                            MarshalJSON implements json.Marshaler. It will encode null if this time is null.

                                                                                                                            func (Time) MarshalText

                                                                                                                            func (t Time) MarshalText() ([]byte, error)

                                                                                                                              MarshalText implements encoding.TextMarshaler. It returns an empty string if invalid, otherwise time.Time's MarshalText.

                                                                                                                              func (Time) Ptr

                                                                                                                              func (t Time) Ptr() *time.Time

                                                                                                                                Ptr returns a pointer to this Time's value, or a nil pointer if this Time is null.

                                                                                                                                func (*Time) SetValid

                                                                                                                                func (t *Time) SetValid(v time.Time)

                                                                                                                                  SetValid changes this Time's value and sets it to be non-null.

                                                                                                                                  func (*Time) UnmarshalJSON

                                                                                                                                  func (t *Time) UnmarshalJSON(data []byte) error

                                                                                                                                    UnmarshalJSON implements json.Unmarshaler. It supports string and null input.

                                                                                                                                    func (*Time) UnmarshalText

                                                                                                                                    func (t *Time) UnmarshalText(text []byte) error

                                                                                                                                      UnmarshalText implements encoding.TextUnmarshaler. It has backwards compatibility with v3 in that the string "null" is considered equivalent to an empty string and unmarshaling will succeed. This may be removed in a future version.

                                                                                                                                      func (Time) Value

                                                                                                                                      func (t Time) Value() (driver.Value, error)

                                                                                                                                        Value implements the driver Valuer interface.

                                                                                                                                        func (Time) ValueOrZero

                                                                                                                                        func (t Time) ValueOrZero() time.Time

                                                                                                                                          ValueOrZero returns the inner value if valid, otherwise zero.

                                                                                                                                          Directories

                                                                                                                                          Path Synopsis
                                                                                                                                          Package zero contains SQL types that consider zero input and null input to be equivalent with convenient support for JSON and text marshaling.
                                                                                                                                          Package zero contains SQL types that consider zero input and null input to be equivalent with convenient support for JSON and text marshaling.