Yeah I want a log package where the log statements that don't log also don't have their arguments evaluated. Half of my gc pressure is little strings created to call the log package that don't get logged.
Yeah I want a log package where the log statements that don't log also don't have their arguments evaluated. Half of my gc pressure is little strings created to call the log package that don't get logged.
So what you want is slog, found in the standard library? The doc.go file found in the package even goes into detail about what you (seem to) describe and how it avoids that problem.
A link to doc.go, for the lazy:
https://cs.opensource.google/go/x/exp/+/645b1fa8:slog/doc.go...
Basically it says to pass in objects, not prepared strings, so the formatted output is only computed if the message is actually logged. That object can be a struct implementing the LogValuer interface to do any required work/produce formatted output.
Oh cool, I hadn't run into LogValuer, that's cool. And passing pointers to strings rather than strings, hmmm.
> And passing pointers to strings rather than strings, hmmm.
Are you referring to the "URL" example? That isn't a case of passing pointers to strings, that is passing a URL (fmt.Stringer) where the String method has a pointer receiver.
To demonstrate why the pointer would be needed in that case, consider: