Hello everyone, thank you for reading. I'm looking at the code of 
slog.GroupValue 
(https://cs.opensource.google/go/go/+/refs/tags/go1.21.0:src/log/slog/value.go;l=171)
 
and was wondering if we could benefit from reusing the same slice like this:

<code>
// GroupValue returns a new Value for a list of Attrs. 
// The caller must not subsequently mutate the argument slice. 
func GroupValue(as ...Attr) Value { 
    // Remove empty groups.
    // It is simpler overall to do this at construction than
    // to check each Group recursively for emptiness.
    var write int
    for read := range as {
        if as[read].isEmptyGroup() {
            as[read] = Attr{} // no need to keep a reference to the string 
Key
        } else {
            if read != write {
                as[write] = as[read]
            }
            write++
        }
    }
    as = as[:write]
    return Value{num: uint64(len(as)), any: groupptr(unsage.SliceData(as))}
}
</code>

This, considering that the documentation of the func already states that 
the user must not mutate the argument slice, so not only the elements but 
the whole slice could be reused.
In the case of having lots of attributes with empty group elements, then 
the stored slice will be unnecessarily larger by that number of Attr 
elements, but I wonder if that would be negligible, probably an edge case 
of misuse.

Kind regards.

-- 
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/791c5981-95ea-44e4-a6f9-38cd65842ae4n%40googlegroups.com.

Reply via email to