Looking again, the second part of my question was wrong (it is a call
to `mapiterkey` and then `mapiterelem` in `Value`).

The code for Key and Value are almost identical, so the question
whether to send a change boils down whether the similarity between the
two is a benefit or a cost. I'm actually leaning towards the similarity
being a benefit and one that would be broken by retaining the value.

Dan

On Tue, 2020-06-30 at 19:24 -0700, Ian Lance Taylor wrote:
> On Tue, Jun 30, 2020 at 6:39 PM 'Dan Kortschak' via golang-nuts
> <golang-nuts@googlegroups.com> wrote:
> > 
> > Is there a reason not to retain the returned value from
> > `mapiterkey` on
> > line 1243 of reflect/value.go[1] for use on line 1249[2].
> > 
> > ```
> > // Key returns the key of the iterator's current map entry.
> > func (it *MapIter) Key() Value {
> >         if it.it == nil {
> >                 panic("MapIter.Key called before Next")
> >         }
> >         if mapiterkey(it.it) == nil { //L1243
> >                 panic("MapIter.Key called on exhausted iterator")
> >         }
> > 
> >         t := (*mapType)(unsafe.Pointer(it.m.typ))
> >         ktype := t.key
> >         return copyVal(ktype, it.m.flag.ro()|flag(ktype.Kind()),
> > mapiterkey(it.it)) // L1249
> > }
> > ```
> > 
> > The same question applies to `*MapIter.Value` method just below
> > `Key`.
> 
> I don't think there is any reason to call the function twice.  The
> value could be retained.
> 
> I think the functionswill be inlined, so it probably won't make any
> performance difference, but it might be a little clearer.
> 
> Ian


-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/6a06fb0b70927f05ed2680e11953e28af50f5a16.camel%40kortschak.io.

Reply via email to