// Copyright 2019 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// +build !go1.12packageimplimport"reflect"typemapIterstruct{vreflect.Valuekeys[]reflect.Value}// mapRange provides a less-efficient equivalent to// the Go 1.12 reflect.Value.MapRange method.funcmapRange(vreflect.Value)*mapIter{return&mapIter{v:v}}func(i*mapIter)Next()bool{ifi.keys==nil{i.keys=i.v.MapKeys()}else{i.keys=i.keys[1:]}returnlen(i.keys)>0}func(i*mapIter)Key()reflect.Value{returni.keys[0]}func(i*mapIter)Value()reflect.Value{returni.v.MapIndex(i.keys[0])}