Releases: guregu/null
Generics & more
- Now a Go module under the path
github.com/guregu/null/v5
⚠️ Please use this instead of from the formergopkg.in
path.- Previously this package didn't use modules to support ancient pre-go mod environments, but now module support is required.
- Added missing types from
database/sql
:Int32, Int16, Byte
- Added generic
Value[T]
embeddingsql.Null[T]
- Note that
zero.Value[T]
requires thatT
iscomparable
.null.Value[T]
supports any value. - This doesn't support TextMarshaler because there's no generic way to support all types (e.g. structs). We could support some types but I'm not sure if that's useful.
- This type requires Go version ≥1.22, on lower versions it won't be present
- Note that
Behavior from v4 is unchanged, so it should be an easy upgrade.
Thank you and enjoy.
What's Changed
Full Changelog: v4.0.0...v5.0.0
Major brush-up
This is a new major release that improves performance and fixes an inconsistency that existed in v3.
null.Time
andzero.Time
now embedsql.NullTime
.null.Time
andzero.Time
'sUnmarshalText
returns a blank string if invalid, making them consistent with the rest of the package (see #47).- Errors returned by this package are now wrapped using Go 1.13-style errors.
- Support for unmarshaling from the JSON representation of
sql.NullXXX
objects (ex.{"Int64": 123, "Valid": true}
) has been dropped, significantly improving unmarshaling time and reducing allocations. - Unmarshaling errors no longer affect
Valid
. Always check for errors.
Support for Equal
was added in the previous release.
Equal method
This release adds an Equal
method to all types, for easy equality checks.
It also adds ValueOrZero
to the zero
package.
Types in the null
package are considered Equal if they're either both invalid, or both valid and have the same value.
Types on the zero
package are considered Equal if their ValueOrZero
is the same, so an invalid string and a valid ""
are equal.
This will be the last release before v4.
Time.IsZero
Adds IsZero
methods for Time in line with the rest of the types.
ValueOrZero
Added a new method ValueOrZero
to every type in the null package. This method returns the inner value if valid, or the zero value if invalid (similar to the zero package). See #17.
Return error when JSON-marshaling NaN or Infinity floats
If you try to JSON marshal Infinity or NaN, you'll get *encoding/json.UnsupportedValueError
. This brings us in line with the standard library.
More flexible JSON parsing
Int
and Float
can now be read from JSON strings. #23
MarshalText for null.String
MarshalText was missing from null.String, but no longer!
Minor documentation fixes
Consistency in the null package
Blank string input now produces a null null.String
. Now the null
package is consistent. Please use the zero.String
type or v2 if you would like the old behavior.
Fixes #10.