Appendix: References
Originally published in Japanese at https://zenn.dev/ymotongpoo/books/go-json-v2-history/viewer/99-references.
Official Go resources
- Go 1.27 Release Notes: https://go.dev/doc/go1.27
- Go 1.25 Release Notes (experimental introduction): https://go.dev/doc/go1.25
- A new experimental Go API for JSON (2025-09-09): https://go.dev/blog/jsonv2-exp
- Evolving the Go Standard Library with math/rand/v2 (2024-05-01): https://go.dev/blog/randv2
- Go 1 and the Future of Go Programs (the compatibility promise): https://go.dev/doc/go1compat
- The Future of JSON in Go (GopherCon 2023, Joe Tsai): https://www.youtube.com/watch?v=avilmOcHKHE
Issues and discussions
| Number | Description |
|---|---|
| #14750 | Case-insensitive matching (2016-03-10 to 2025-06-27) |
| #4712 | Representation of time.Duration (closed 2017-02-17) |
| #63397 | The encoding/json/v2 Discussion (2023-10-05) |
| #71497 | The formal proposal (2025-01-31; accepted 2026-05-13) |
| #71631 | Default representation of time.Duration (closed 2025-12-18) |
| #79071 | Withdrawal of the format tag (2026-04-30) |
| #74472 | Typed struct tags proposal (on hold) |
| #76406 | json/v2 working group meeting minutes |
| #61716 | The math/rand/v2 proposal (accepted 2023-10-03) |
| #60751 | Positioning as the first v2 in the standard library |
| #67401 | The linkname lockdown |
Prototype and benchmarks
- go-json-experiment/json: https://github.com/go-json-experiment/json
- go-json-experiment/jsonbench: https://github.com/go-json-experiment/jsonbench
Third parties
- goccy/go-json: https://github.com/goccy/go-json
- goccy/go-json#568 (case-insensitive matching stops working at 17 or more fields): https://github.com/goccy/go-json/issues/568
- bytedance/sonic’s Go 1.27 compatibility catalog: https://github.com/bytedance/sonic/blob/main/docs/sonic-go127-compatibility.md
- json-iterator/go (archived): https://github.com/json-iterator/go
- golang/protobuf#1673 (protojson and jsontext): https://github.com/golang/protobuf/issues/1673
Standard library sources quoted in this book
| Description | File |
|---|---|
| The list of v1 legacy behavior flags | src/encoding/json/internal/jsonflags/flags.go |
DefaultOptionsV1 and the migration documentation | src/encoding/json/v2_options.go |
| The bridge between v1 and v2 error types | src/encoding/json/v2_inject.go |
The format tag implementation and its enabling switch | src/encoding/json/v2/arshal_time.go, src/encoding/json/internal/jsonopts/options_format.go |
| The Hyrum-proofing of error wording | src/encoding/json/v2/errors.go |
The optimized path for decoding into any | src/encoding/json/v2/arshal_default.go |
The GOEXPERIMENT default values | src/internal/buildcfg/exp.go |
The benchmark results in this book were taken on go1.27 darwin/arm64 (Apple M5 Pro). Benchmark numbers depend heavily on the environment and the shape of the data, so re-measure with your own data before using them for decisions. The quoted source code is from Go 1.27.0. Option names and flag layouts may change in future releases.