diff options
Diffstat (limited to 'libgo/go/expvar/expvar.go')
-rw-r--r-- | libgo/go/expvar/expvar.go | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libgo/go/expvar/expvar.go b/libgo/go/expvar/expvar.go index 976b300..c0dc053 100644 --- a/libgo/go/expvar/expvar.go +++ b/libgo/go/expvar/expvar.go @@ -141,8 +141,14 @@ func (v *Map) Init() *Map { func (v *Map) addKey(key string) { v.keysMu.Lock() defer v.keysMu.Unlock() - v.keys = append(v.keys, key) - sort.Strings(v.keys) + // Using insertion sort to place key into the already-sorted v.keys. + if i := sort.SearchStrings(v.keys, key); i >= len(v.keys) { + v.keys = append(v.keys, key) + } else if v.keys[i] != key { + v.keys = append(v.keys, "") + copy(v.keys[i+1:], v.keys[i:]) + v.keys[i] = key + } } func (v *Map) Get(key string) Var { |