proposal: Go 2: text/template: return errors from HTMLEscape and JSEscape

kognpnkq  于 5个月前  发布在  Go
关注(0)|答案(2)|浏览(43)

template.HTMLEscapetemplate.JSEscape 分别接受一个 io.Writer 并写入它。然而,它们忽略了来自 Write 的错误。
当目标 io.Writer 是一个不能失败的(如 *bytes.Buffer),这没问题,但通常会掩盖实际错误(参见 #20803 (评论))。
调用者可以通过 Package io.Writer 来检测这些错误,但是 Package 一个 io.Writer 以捕获它已经无谓地返回的错误会使代码变得复杂。
这些函数应该返回错误,并将是否可以安全忽略这些错误的决定留给调用者。

兼容性

这个更改将在调用站点兼容(使绝大多数调用者保持不变),但会破坏将 template.HTMLEscapetemplate.JSEscape 作为 func(io.Writer, []byte) 传递或分配的程序。这样的用法应该很少见。
作为替代方案,我们可以添加那些返回错误的函数的变体;然而,单独的变体会掩盖分析工具中缺失的错误检查。我认为在 Go 2 清理中简单地更改签名会更好。

ma8fv8wu

ma8fv8wu2#

听起来不错。我认为对于Go2,我们应该审查标准库,并考虑修复所有接受io.Writer但不返回错误的函数和方法。我想知道我们是否应该对其他参数类型(如io.Reader)做同样的处理。

相关问题