From: Matt Joiner Date: Tue, 17 Jul 2018 11:25:15 +0000 (+1000) Subject: bencode: Avoid Value.Interface call testing for big.Int X-Git-Tag: v1.0.0~72 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=b00711bb68a2761b10fd502955aa52a06f32ea9c;p=btrtrc.git bencode: Avoid Value.Interface call testing for big.Int Was resulting in significant allocation. --- diff --git a/bencode/encode.go b/bencode/encode.go index e364a5d3..d6b6334f 100644 --- a/bencode/encode.go +++ b/bencode/encode.go @@ -105,16 +105,18 @@ func (e *Encoder) reflectMarshaler(v reflect.Value) bool { return false } +var bigIntType = reflect.TypeOf(big.Int{}) + func (e *Encoder) reflectValue(v reflect.Value) { if e.reflectMarshaler(v) { return } - switch t := v.Interface().(type) { - case big.Int: + if v.Type() == bigIntType { e.writeString("i") - e.writeString(t.String()) + bi := v.Interface().(big.Int) + e.writeString(bi.String()) e.writeString("e") return }