Skip to content

Commit 59bfbc1

Browse files
committed
Use SetIterKey/SetIterValue
Compared to previous commit: ``` │ stash.bench │ fix-setiterval.bench │ │ sec/op │ sec/op vs base │ Map-10 3.159µ ± 1% 2.609µ ± 1% -17.44% (p=0.002 n=6) │ stash.bench │ fix-setiterval.bench │ │ B/op │ B/op vs base │ Map-10 1360.0 ± 0% 752.0 ± 0% -44.71% (p=0.002 n=6) │ stash.bench │ fix-setiterval.bench │ │ allocs/op │ allocs/op vs base │ Map-10 128.00 ± 0% 90.00 ± 0% -29.69% (p=0.002 n=6) ``` Compared to 1dee3c3: ``` │ 1dee3c3.bench │ fix-setiterval.bench │ │ sec/op │ sec/op vs base │ Map-10 3.608µ ± 1% 2.537µ ± 1% -29.68% (p=0.002 n=6) │ 1dee3c3.bench │ fix-setiterval.bench │ │ B/op │ B/op vs base │ Map-10 1888.0 ± 0% 752.0 ± 0% -60.17% (p=0.002 n=6) │ 1dee3c3.bench │ fix-setiterval.bench │ │ allocs/op │ allocs/op vs base │ Map-10 130.00 ± 0% 90.00 ± 0% -30.77% (p=0.002 n=6) ````
1 parent d83ece6 commit 59bfbc1

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

hashstructure.go

+8-4
Original file line numberDiff line numberDiff line change
@@ -216,13 +216,17 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) {
216216
// and value hashes. This makes it deterministic despite ordering.
217217
var h uint64
218218

219+
k := reflect.New(v.Type().Key()).Elem()
220+
vv := reflect.New(v.Type().Elem()).Elem()
221+
219222
iter := v.MapRange()
223+
220224
for iter.Next() {
221-
k := iter.Key()
222-
v := iter.Value()
225+
k.SetIterKey(iter)
226+
vv.SetIterValue(iter)
223227
if includeMap != nil {
224228
incl, err := includeMap.HashIncludeMap(
225-
opts.StructField, k.Interface(), v.Interface())
229+
opts.StructField, k.Interface(), vv.Interface())
226230
if err != nil {
227231
return 0, err
228232
}
@@ -235,7 +239,7 @@ func (w *walker) visit(v reflect.Value, opts *visitOpts) (uint64, error) {
235239
if err != nil {
236240
return 0, err
237241
}
238-
vh, err := w.visit(v, nil)
242+
vh, err := w.visit(vv, nil)
239243
if err != nil {
240244
return 0, err
241245
}

0 commit comments

Comments
 (0)