aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorapocelipes <seve3r@outlook.com>2024-04-02 13:41:00 +0000
committerGopher Robot <gobot@golang.org>2024-04-11 16:40:14 +0000
commit08af216c75a583a198c4ccfe68628c74554ee82f (patch)
tree3c02d4bd8f1103fec6e353a61028015eae8a3fec /src/encoding
parent45703b50a6ae557ebe9bd7b1bea8e49d66fc97ee (diff)
downloadgo-08af216c75a583a198c4ccfe68628c74554ee82f.tar.gz
go-08af216c75a583a198c4ccfe68628c74554ee82f.zip
encoding/json: use slices to simplify the code
Use "slices.Equal" instead of "reflect.DeepEqual". Replace unnecessary helper type "byIndex" with "slices.SortFunc". No effect on benchmarks. Change-Id: I1fb2768ea6d9db7f487408fa109343be3f1741d5 GitHub-Last-Rev: 8429bc145272ae620fcd001b1de393bf3c0b6108 GitHub-Pull-Request: golang/go#66646 Reviewed-on: https://go-review.googlesource.com/c/go/+/575715 Reviewed-by: qiu laidongfeng2 <2645477756@qq.com> Auto-Submit: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Carlos Amedee <carlos@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/json/decode_test.go5
-rw-r--r--src/encoding/json/encode.go25
2 files changed, 7 insertions, 23 deletions
diff --git a/src/encoding/json/decode_test.go b/src/encoding/json/decode_test.go
index a10c1e1ebb..f5b44677b3 100644
--- a/src/encoding/json/decode_test.go
+++ b/src/encoding/json/decode_test.go
@@ -14,6 +14,7 @@ import (
"math/big"
"net"
"reflect"
+ "slices"
"strconv"
"strings"
"testing"
@@ -1998,7 +1999,7 @@ func TestByteKind(t *testing.T) {
if err != nil {
t.Fatalf("Unmarshal error: %v", err)
}
- if !reflect.DeepEqual(got, want) {
+ if !slices.Equal(got, want) {
t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot: %v\n\twant: %v", got, want)
}
}
@@ -2017,7 +2018,7 @@ func TestSliceOfCustomByte(t *testing.T) {
if err != nil {
t.Fatalf("Unmarshal error: %v", err)
}
- if !reflect.DeepEqual(got, want) {
+ if !slices.Equal(got, want) {
t.Fatalf("Marshal/Unmarshal mismatch:\n\tgot: %v\n\twant: %v", got, want)
}
}
diff --git a/src/encoding/json/encode.go b/src/encoding/json/encode.go
index d6f6900dc9..0035a65cfc 100644
--- a/src/encoding/json/encode.go
+++ b/src/encoding/json/encode.go
@@ -1042,25 +1042,6 @@ type field struct {
encoder encoderFunc
}
-// byIndex sorts field by index sequence.
-type byIndex []field
-
-func (x byIndex) Len() int { return len(x) }
-
-func (x byIndex) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
-
-func (x byIndex) Less(i, j int) bool {
- for k, xik := range x[i].index {
- if k >= len(x[j].index) {
- return false
- }
- if xik != x[j].index[k] {
- return xik < x[j].index[k]
- }
- }
- return len(x[i].index) < len(x[j].index)
-}
-
// typeFields returns a list of fields that JSON should recognize for the given type.
// The algorithm is breadth-first search over the set of structs to include - the top struct
// and then any reachable anonymous structs.
@@ -1195,7 +1176,7 @@ func typeFields(t reflect.Type) structFields {
if x[i].tag != x[j].tag {
return x[i].tag
}
- return byIndex(x).Less(i, j)
+ return slices.Compare(x[i].index, x[j].index) == -1
})
// Delete all fields that are hidden by the Go rules for embedded fields,
@@ -1227,7 +1208,9 @@ func typeFields(t reflect.Type) structFields {
}
fields = out
- sort.Sort(byIndex(fields))
+ slices.SortFunc(fields, func(i, j field) int {
+ return slices.Compare(i.index, j.index)
+ })
for i := range fields {
f := &fields[i]