From e75c899a10c9321d1b4935c34401f66b2abad83a Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Thu, 23 Jun 2016 13:32:50 -0400 Subject: [PATCH] reflect: optimize (reflect.Type).Name MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Improves JSON decoding on linux/amd64. name old time/op new time/op delta CodeUnmarshal-40 89.3ms ± 2% 86.3ms ± 2% -3.31% (p=0.000 n=22+22) name old speed new speed delta CodeUnmarshal-40 21.7MB/s ± 2% 22.5MB/s ± 2% +3.44% (p=0.000 n=22+22) Updates #16117 Change-Id: I52acf31d7729400cfe6693e46292d41e1addba3d Reviewed-on: https://go-review.googlesource.com/24410 Run-TryBot: David Crawshaw Reviewed-by: Ian Lance Taylor --- src/reflect/type.go | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/reflect/type.go b/src/reflect/type.go index b37fb9f0a5..d60d0b060b 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -891,25 +891,30 @@ func hasPrefix(s, prefix string) bool { func (t *rtype) Name() string { s := t.String() - if hasPrefix(s, "map[") { - return "" - } - if hasPrefix(s, "struct {") { - return "" - } - if hasPrefix(s, "chan ") { - return "" - } - if hasPrefix(s, "chan<-") { - return "" - } - if hasPrefix(s, "func(") { - return "" - } - if hasPrefix(s, "interface {") { - return "" - } switch s[0] { + case 'm': + if hasPrefix(s, "map[") { + return "" + } + case 's': + if hasPrefix(s, "struct {") { + return "" + } + case 'c': + if hasPrefix(s, "chan ") { + return "" + } + if hasPrefix(s, "chan<-") { + return "" + } + case 'f': + if hasPrefix(s, "func(") { + return "" + } + case 'i': + if hasPrefix(s, "interface {") { + return "" + } case '[', '*', '<': return "" } -- 2.50.0