("a"[0] + 'a') 和 (byte(97) + rune(97)) 有什么区别?

daGaiGuanYu · 2023-01-04 22:59:49 · 1594 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-01-04 22:59:49 的主题,其中的信息可能已经有所发展或是发生改变。

下面的代码:

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 类型。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1594 次点击  ∙  1 赞  
加入收藏 微博
3 回复  |  直到 2023-01-05 10:14:19
jan-bar
jan-bar · #1 · 2年之前

第一个'a'相当于const常量,编译时直接计算。而第二行则是运行时计算,类型都不一样当然报错。你看下图第二种情况,也一样报错。你得了解一下go里面const的规范,特别是你的第一种情况是个无类型的const,没有类型当然可以和其他类型结合了。

image.png

zzustu
zzustu · #2 · 2年之前

私认为没那多弯弯绕绕的道理,就是因为:虽然是数字类型, Go 也只允许相同的类型才能运算,byte 底层是 uint8,rune 底层是 int32

daGaiGuanYu
daGaiGuanYu · #3 · 2年之前
jan-barjan-bar #1 回复

第一个`'a'`相当于`const`常量,编译时直接计算。而第二行则是运行时计算,类型都不一样当然报错。你看下图第二种情况,也一样报错。你得了解一下go里面`const`的规范,特别是你的第一种情况是个无类型的`const`,没有类型当然可以和其他类型结合了。 ![image.png](https://static.golangjob.cn/230105/44e0435f405c0275326cb99e4a3afc13.png)

感谢指点,刚开始学 go,啥也不懂哈哈哈

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传