为了账号安全,请及时绑定邮箱和手机立即绑定

Go 将字节与符文进行比较的规则是什么?

Go 将字节与符文进行比较的规则是什么?

Go
杨魅力 2022-01-10 10:48:13
我发现了以下特点:b := "a"[0]r := 'a'fmt.Println(b == r) // Does not compile, cannot compare byte and runefmt.Println("a"[0] == 'a') // Compiles and prints "true"这是如何运作的?
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

这是一个无类型常量的例子。从文档:


只要可以分别使用布尔、数字或字符串类型的操作数,无类型的布尔、数字和字符串常量都可以用作操作数。除了移位操作,如果二元操作的操作数是不同类型的无类型常量,则操作和非布尔操作的结果使用此列表后面出现的类型:整数、符文、浮点数、复数.


由于'a'是一个无类型常量,编译器会尝试将其转换为与其他操作数相当的类型。在这种情况下,它会转换为byte.


当符文常量不适合单个字节时,您可以看到这不起作用:


package main


import (

    "fmt"

)


func main() {

    const a = '€'

    fmt.Println("a"[0] == a) // constant 8364 overflows byte

}

https://play.golang.org/p/lDN-SERUgN


查看完整回答
反对 回复 2022-01-10
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

符文文字“a”代表符文常数。常量可能是无类型的。简而言之,r := 'a'rune 常量的声明形式'a'隐式转换为其默认类型,即rune. 但是您可以通过分配给类型化变量来显式转换它。

var r byte = 'a'

看看它的工作原理https://play.golang.org/p/lqMq8kQoE-


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信