什么是上下文感知变量?

What are context aware variables?

我听到有人谈论 Go 如何在使用 HTML 时很好地实现 "context aware variables"。它们是什么以及它们如何工作?

我猜是因为它与安全性有关,所以它是某种变量,知道它是否已被清理。它是不是类似于一个叫做 unsanitizedString 的 class,它会在转换为普通字符串时自动清理内容?

html/template 包是上下文感知的。

This package understands HTML, CSS, JavaScript, and URIs. It adds sanitizing functions to each simple action pipeline

因此,如果您有包含 <script>alert('you have been pwned')</script> 的变量 Foo 并将其打印在 html 元素内 <p>{{.Foo}}</p> Foo 将被正确转义以避免脚本注入。

使用 html/template 时,如果您想在应该发生转义时覆盖,则必须向变量添加显式类型。

这是一个example