go - 比较命名管道和未命名类型时编译错误

标签 go

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.HTMLstringtemplate.HTML虽然是由string驱动的,但是不兼容。您应该将变量转换为 template.HTML(htmlString)

但是第一个表达式

template.HTML("test") == "test"

是有效的,因为常量“test”的类型被解释为 template.HTML。无类型常量具有默认类型,但它可以是编译时上下文驱动的任何类型。 This article详细解释常量。也许这篇文章可以让您的问题更清楚。

关于go - 比较命名管道和未命名类型时编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791568/

相关文章:

http - 流式传输 HTTP 客户端需要很长时间才能收到第一个响应字节

go - go build -ldflags参数中的-static是什么意思?

unit-testing - 打开和读取文件的单元测试功能

performance - 为什么内存拷贝第一次运行很慢?

当调用结构上的方法时,Goroutines 不工作

azure - Function App 在本地运行良好,但部署到 Azure 时失败

google-app-engine - 部署到 App Engine 时找不到包

go - Go-Gorm有一个始终为空的子表

arrays - 如何使用go从mongoDB数组中获取所有元素?

去获取 : disabled by -mod=vendor