package main
import (
"fmt"
"html/template"
)
func main() {
fmt.Println(template.HTML("test") == "test")
htmlString := "test"
fmt.Println(template.HTML("test") == htmlString)
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/dON4eLpGN8
文档template.HTML:http:
//golang.org/pkg/html/template/#HTML
第一个比较是true.但是,第二次比较产生以下错误:
无效操作:"html/template".HTML("test")== htmlString(不匹配的类型"html/template".HTML和string)
有人可以解释引擎盖下发生的事情吗?
简而言之,第二个表达式无效,它们的类型不兼容.
Go中的每个操作,参数都必须是相同的类型.第二个表达
template.HTML("test") == htmlString
Run Code Online (Sandbox Code Playgroud)
是无效的,因为它是比较template.HTML和string.虽然template.HTML是驱使string,但它是不相容的.你应该把变量变成像template.HTML(htmlString).
但第一个表达方式
template.HTML("test") == "test"
Run Code Online (Sandbox Code Playgroud)
是有效的,因为常量"test"的类型被解释为template.HTML.Untyped常量具有默认类型,但在编译时它可以是上下文的任何驱动类型.本文将详细介绍常量.也许这篇文章让你的问题清楚.