-
Daniel Martí authored
There's precedent in handling panics that happen in functions called from the standard library. For example, if a fmt.Formatter implementation fails, fmt will absorb the panic into the output text. Recovering panics is useful, because otherwise one would have to wrap some Template.Execute calls with a recover. For example, if there's a chance that the callbacks may panic, or if part of the input data is nil when it shouldn't be. In particular, it's a common confusion amongst new Go developers that one can call a method on a nil receiver. Expecting text/template to error on such a call, they encounter a long and confusing panic if the method expects the receiver to be non-nil. To achieve this, introduce safeCall, which takes care of handling error returns as well as recovering panics. Handling panics in the "call" function isn't strictly necessary, as that func itself is run via evalCall. However, this makes the code more consistent, and can allow for better context in panics via the "call" function. Finally, add some test cases with a mix of funcs, methods, and func fields that panic. Fixes #28242. Change-Id: Id67be22cc9ebaedeb4b17fa84e677b4b6e09ec67 Reviewed-on: https://go-review.googlesource.com/c/143097 Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
202e9031
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
parse | ||
testdata | ||
doc.go | ||
example_test.go | ||
examplefiles_test.go | ||
examplefunc_test.go | ||
exec.go | ||
exec_test.go | ||
funcs.go | ||
helper.go | ||
multi_test.go | ||
option.go | ||
template.go |