|
|
@@ -0,0 +1,49 @@
|
|
|
+# FAQ
|
|
|
+
|
|
|
+## Managing Binary Size
|
|
|
+
|
|
|
+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*.
|
|
|
+
|
|
|
+## Resolving Module Issues
|
|
|
+
|
|
|
+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
|
|
|
+```
|
|
|
+
|