package main
import (
"fmt"
"html/template"
)
func main() {
fmt.Println(template.HTML("test") == "test")
htmlString := "test"
fmt.Println(template.HTML("test") == htmlString)
}
http://play.golang.org/p/dON4eLpGN8
template.HTML
的文件:
http://golang.org/pkg/html/template/#HTML
第一个比较是true
。但是,第二次比较产生以下错误:
无效操作:" html / template" .HTML(" test")== htmlString (不匹配的类型" html / template" .HTML和字符串)
有人可以解释引擎盖下发生的事情吗?
答案 0 :(得分:5)
简而言之,第二个表达式无效,它们的类型不兼容。
Go中的每个操作,参数都必须是相同的类型。第二个表达
template.HTML("test") == htmlString
无效,因为它正在比较template.HTML
和string
。虽然template.HTML
来自string
,但它不兼容。您应该像template.HTML(htmlString)
一样投射变量。
但第一个表达
template.HTML("test") == "test"
是有效的,因为常量的类型" test"解释为template.HTML
。 Untyped常量具有默认类型,但在编译时它可以是上下文的任何驱动类型。 This article详细解释了这一点。也许这篇文章会让你的问题清楚。