string - golang 中字符串、字节和符文的行为
问题描述
package main
import (
"fmt"
)
func main() {
word := "hello"
fmt.Println("---------A--------")
fmt.Printf("%T\n", word[0])
fmt.Println("---------B--------")
for i, v := range word {
fmt.Printf("%T\n", v)
fmt.Printf("%T\n", word[i])
break
}
fmt.Println("---------C--------")
fmt.Printf("%T\n", 'h')
fmt.Println('h' == word[0])
}
谁能解释一下为什么在“C”fmt.Println('h' == word[0])
部分没有抛出和错误。我们正在尝试将 rune 与 byte 进行比较,所以它应该会抛出错误。谁能解释一下它背后的原因。
解决方案
'h'
是一个无类型常量。无类型常量根据上下文分配类型。在那个特定的上下文中,它被分配了 type byte
。
这将不起作用:
x:='h'
fmt.Println(x==word[0])
在这种情况下,x
被声明为rune
,word[0]
比较会产生错误。
推荐阅读
- javascript - 仅当条件在 Reactjs 中第二次运行时才显示水平线
- javascript - 无法使用 Node.js (ERR_HTTP_HEADERS_SENT) 获取 redis 键值对
- apache-spark - 在 GCP Dataproc 中,我们可以在集群中使用的最大工作节点数是多少?
- python - 如何有条件地拆分熊猫中的全名字符串列
- java - 如何解决 Java 中的 NullPointerException 错误?
- coq - 由 case_eq 和 Coq 重写导致的抽象/打字错误
- sql - 如何在SQL中选择具有一列条件值的行
- python - 删除列表中的特定列表
- keycloak - 如何在keycloak中的单个资源上添加多个所有者
- filter - 在 powerbi 中使用多个过滤器进行 DAX 查询