Go 模板正在向输出添加额外的引号
Go template is adding extra quotes to output
我想在 Go 模板中按原样使用我的变量值,但 Go 在它周围添加了额外的引号。例如,对于像
这样的 Go 模板
{{.Site}}:{{.Port}}/{{.Path}}
我想得到输出为
Mysite:3000/from/here
但模板却给了我以下内容:
"Mysite":"3000"/"from/here"
所以,
- 我该如何修复它(去掉所有多余的引号或更好地暂停它们)?参见 https://play.golang.org/p/uKpgXdLv5gM
- Go 模板也将
"orgId=1&refresh=30s"
更改为 orgId=1\u0026refresh=30s
,如何避免?
- 此外,如果我将
https://
添加到 url 的前面,输出将被截断。如何解决这个问题?
- 最后,“`”中的“`”是否可以转义?
HTML templates treat data values as plain text which should be encoded so they can be safely embedded in an HTML document. The escaping is contextual, so actions can appear within JavaScript, CSS, and URI contexts.
The security model used by this package assumes that template authors are trusted, while Execute's data parameter is not. More details are provided below.
这意味着只要go HTML模板引擎检测到它在<script>
标签内,就会启用JavaScript转义,(即与是否使用正则无关) "
或不像第一个评论者认为的那样)。所以
得到输出为
Mysite:3000/from/here
而不是:
"Mysite":"3000"/"from/here"
不要 用<script>
& </script>
标签包装它。
在 模板 Execute()
.
之后执行串联
同样,使用 <script>
& </script>
标签环绕,我得到:
var url = `"Mysite":"3000"/"from/here"/${othervars}?"orgId=1\u0026refresh=30s"`
对比没有 <script>
& </script>
标签环绕它,我得到:
var url = `Mysite:3000/from/here/${othervars}?orgId=1&refresh=30s`
正是我需要的。
然而,我的实际情况是我正在使用 go HTML 模板引擎来处理我的 .html 模板文件,所以我不能在之后真正进行连接,因为所有内容都在中定义.html 模板文件。因此,正如 Martin Gallagher 在他的代码中所展示的那样,对于这种情况,使用模板函数似乎是唯一的选择。
但即使那样也可能不是一个可行的选择,因为这是我从 Martin 的代码中得到的:
var url = "Mysite:3000\/from\/here?orgId=1\u0026refresh=30s"
还是不是我想要的:
var url = `Mysite:3000/from/here/${othervars}?orgId=1&refresh=30s`
所以可能对于这种情况,确实没有理想的解决方案。
我想在 Go 模板中按原样使用我的变量值,但 Go 在它周围添加了额外的引号。例如,对于像
这样的 Go 模板{{.Site}}:{{.Port}}/{{.Path}}
我想得到输出为
Mysite:3000/from/here
但模板却给了我以下内容:
"Mysite":"3000"/"from/here"
所以,
- 我该如何修复它(去掉所有多余的引号或更好地暂停它们)?参见 https://play.golang.org/p/uKpgXdLv5gM
- Go 模板也将
"orgId=1&refresh=30s"
更改为orgId=1\u0026refresh=30s
,如何避免? - 此外,如果我将
https://
添加到 url 的前面,输出将被截断。如何解决这个问题? - 最后,“`”中的“`”是否可以转义?
HTML templates treat data values as plain text which should be encoded so they can be safely embedded in an HTML document. The escaping is contextual, so actions can appear within JavaScript, CSS, and URI contexts.
The security model used by this package assumes that template authors are trusted, while Execute's data parameter is not. More details are provided below.
这意味着只要go HTML模板引擎检测到它在<script>
标签内,就会启用JavaScript转义,(即与是否使用正则无关) "
或不像第一个评论者认为的那样)。所以
得到输出为
Mysite:3000/from/here
而不是:
"Mysite":"3000"/"from/here"
不要 用<script>
& </script>
标签包装它。
在 模板 Execute()
.
同样,使用 <script>
& </script>
标签环绕,我得到:
var url = `"Mysite":"3000"/"from/here"/${othervars}?"orgId=1\u0026refresh=30s"`
对比没有 <script>
& </script>
标签环绕它,我得到:
var url = `Mysite:3000/from/here/${othervars}?orgId=1&refresh=30s`
正是我需要的。
然而,我的实际情况是我正在使用 go HTML 模板引擎来处理我的 .html 模板文件,所以我不能在之后真正进行连接,因为所有内容都在中定义.html 模板文件。因此,正如 Martin Gallagher 在他的代码中所展示的那样,对于这种情况,使用模板函数似乎是唯一的选择。
但即使那样也可能不是一个可行的选择,因为这是我从 Martin 的代码中得到的:
var url = "Mysite:3000\/from\/here?orgId=1\u0026refresh=30s"
还是不是我想要的:
var url = `Mysite:3000/from/here/${othervars}?orgId=1&refresh=30s`
所以可能对于这种情况,确实没有理想的解决方案。