This package adds some size to any binary that depends on it.
This is because we include an auto-generated file: fast-path.generated.go
to help with performance when encoding/decoding slices and maps of
built in numeric, boolean, string and interface{} types.
Prior to 2019-05-16, this package could add about 11MB
to the size of
your binaries. We have now trimmed that in half, and the package
contributes about 5.5MB
. This compares favorably to other packages like
json-iterator/go
(3.3MB)
and net/http
(3.5MB)
.
Furthermore, you can bypass building fast-path.generated.go
, by building
(or running tests and benchmarks) with the tag: notfastpath
.
go install -tags notfastpath
go build -tags notfastpath
go test -tags notfastpath
With the tag notfastpath
, we trim that size to about 2.8MB
.
Be aware that, at least in our representative microbenchmarks for cbor (for example),
passing notfastpath
tag causes significant performance loss (about 33%).
YMMV.
Prior to v1.1.5, go-codec unknowingly introduced some headaches for its
users while introducing module support. We tried to make
github.com/ugorji/go/codec
a module. At that time, multi-repository
module support was weak, so we reverted and made github.com/ugorji/go/
the module. However, folks previously used go-codec in module mode
before it formally supported modules. Eventually, different established packages
had go.mod files contain various real and pseudo versions of go-codec
which causes go
to barf with ambiguous import
error.
To resolve this, from v1.1.5 and up, we use a requirements cycle between
modules github.com/ugorji/go/codec
and github.com/ugorji/go/
,
tagging them with parallel consistent tags (codec/vX.Y.Z and vX.Y.Z
)
to the same commit.
Fixing ambiguous import
failure is now as simple as running
go get -u github.com/ugorji/go/codec@latest