下面的代码:
``` go
package main
import "fmt"
func main() {
fmt.Println("a"[0] + 'a') // 194
fmt.Println(byte(97) + rune(97)) // 报错:invalid operation: byte(97) + rune(97) (mismatched types byte and rune)
}
```
第一个打印正常,但是第二个报错,为什么呢?
"a"[0] 是 byte 类型,而 'a' 是 rune 类型。
第一个`'a'`相当于`const`常量,编译时直接计算。而第二行则是运行时计算,类型都不一样当然报错。你看下图第二种情况,也一样报错。你得了解一下go里面`const`的规范,特别是你的第一种情况是个无类型的`const`,没有类型当然可以和其他类型结合了。
![image.png](https://static.golangjob.cn/230105/44e0435f405c0275326cb99e4a3afc13.png)
#1
更多评论
私认为没那多弯弯绕绕的道理,就是因为:虽然是数字类型, Go 也只允许相同的类型才能运算,byte 底层是 uint8,rune 底层是 int32
#2