mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-26 05:09:41 +00:00
util/jsonutil: new package
The cornerstone API is a more memory-efficient Unmarshal. The savings come from re-using a json.Decoder. BenchmarkUnmarshal-8 4016418 288 ns/op 8 B/op 1 allocs/op BenchmarkStdUnmarshal-8 4189261 283 ns/op 184 B/op 2 allocs/op It also includes a Bytes type to reduce allocations when unmarshalling a non-hex-encoded JSON string into a []byte. Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
This commit is contained in:

committed by
Josh Bleecher Snyder

parent
b65eee0745
commit
a5dd0bcb09
17
util/jsonutil/types.go
Normal file
17
util/jsonutil/types.go
Normal file
@@ -0,0 +1,17 @@
|
||||
// Copyright (c) 2020 Tailscale Inc & AUTHORS All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package jsonutil
|
||||
|
||||
// Bytes is a byte slice in a json-encoded struct.
|
||||
// encoding/json assumes that []byte fields are hex-encoded.
|
||||
// Bytes are not hex-encoded; they are treated the same as strings.
|
||||
// This can avoid unnecessary allocations due to a round trip through strings.
|
||||
type Bytes []byte
|
||||
|
||||
func (b *Bytes) UnmarshalText(text []byte) error {
|
||||
// Copy the contexts of text.
|
||||
*b = append(*b, text...)
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user