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
。但是,第二次比较会产生以下错误:
invalid operation: "html/template".HTML("test") == htmlString (mismatched types "html/template".HTML and string)
谁能解释一下幕后发生的事情?
最佳答案
简而言之,第二个表达式无效,它们的类型不兼容。
Go 中的每个操作,参数必须是同一类型。第二个表达式
template.HTML("test") == htmlString
无效,因为它正在比较 template.HTML
和 string
。 template.HTML
虽然是由string
驱动的,但是不兼容。您应该将变量转换为 template.HTML(htmlString)
。
但是第一个表达式
template.HTML("test") == "test"
是有效的,因为常量“test”的类型被解释为 template.HTML
。无类型常量具有默认类型,但它可以是编译时上下文驱动的任何类型。 This article详细解释常量。也许这篇文章可以让您的问题更清楚。
关于go - 比较命名管道和未命名类型时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791568/