go/api/next
Jonathan Amsterdam bdccb85f50 log/slog: add Source type for source location
Add a struct called Source that holds the function, file and line
of a location in the program's source code.

When HandleOptions.AddSource is true, the ReplaceAttr function will
get an Attr whose key is SourceKey and whose value is a *Source.

We use *Source instead of Source to save an allocation. The pointer
and the value each cause one allocation up front: the pointer when it
is created, and the value when it is assigned to the `any` field of a
slog.Value (handle.go:283). If a ReplaceAttr function wanted to modify
a Source value, it would have to create a new slog.Value to return,
causing a second allocation, but the function can modify a *Source in
place.

TextHandler displays a Source as "file:line".

JSONHandler displays a Source as a group of its non-zero fields.

This replaces the previous design, where source location was always a
string with the format "file:line". The new design gives users more
control over how to output and consume source locations.

Fixes #59280.

Change-Id: I84475abd5ed83fc354b50e34325c7b246cf327c7
Reviewed-on: https://go-review.googlesource.com/c/go/+/486376
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
2023-04-20 17:36:42 +00:00
..
25448.txt
34648.txt
40221.txt
41198.txt
44855.txt
46159.txt
46259.txt
52221.txt
52600.txt
53573.txt
53685.txt
53747.txt
54386.txt
54768.txt
55002.txt
55079.txt
55107.txt
56102.txt
56345.txt
56491.txt
56539.txt
56661.txt
56887.txt
56892.txt
56906.txt
56921.txt
56984.txt
56986.txt
57237.txt
57433.txt
57436.txt
57708.txt
57786.txt
57928.txt
59033.txt
59060.txt
59166.txt
59280.txt log/slog: add Source type for source location 2023-04-20 17:36:42 +00:00