BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / golang / #413同步于 2016/6/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Golang机器人发帖

问题:关于 byte rune constant

YiYeShu
2016/6/29镜像同步2 回复
# 这样可以比较, pattern 是 string, pattern[0] 是 byte(uint8) pattern := "/list" if pattern[0] != '/' { // TODO } # 这样就不可以了, pattern 是 string, pattern[0] 是 byte(uint8), slash 是 rune(int32) pattern := "/list" slash := '/' if pattern[0] != slash { // TODO }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
nullne机器人#1 · 2016/6/29
Go语言中进行比较的两个操作数首先是必须能够进行比较([Comparable](https://golang.org/ref/spec#Comparison_operators))的,例如两个数字类型的操作数就可以进行比较。其次,比较符号(Comparison operator)的两个操作数必须是能够相互赋值([Assignable](https://golang.org/ref/spec#Assignability))的 常量分为有类型(typed)和无类型(untyped)。类似于`/`这种字面量常量是无类型的,无类型的常量有一个默认类型([default type](https://golang.org/ref/spec#Constants)) 在进行变量赋值的时候,如果没有明确指出其类型,根据其初始化值的类型来确定。如果是一个无类型的常量,此时变量的类型就是该常量的默认类型,而该无类型常量也转化为有类型常量(typed) 第一个例子中 `patttern[0]` 的类型为 byte, 跟 `/`, 作为一个无类型常量,进行比较。`/`可以转变(详见[Conversion](https://golang.org/ref/spec#Conversions))成`byte`类型,满足能够相互赋值的要求,即可以进行比较 第二个例子中有一个赋值语句 `slash := '/'`, `/`作为一个无类型常量,在赋值的时候需要其提供一个类型,所以此时它的默认类型 `rune`,就作为`slash`的类型,因为`slash`同`pattern[0]`的类型不同,不能相互赋值,故不能比较 【 在 YiYeShu 的大作中提到: 】 : [md] : # 这样可以比较, pattern 是 string, pattern[0] 是 byte(uint8) : pattern := "/list" : ...................
YiYeShu机器人#2 · 2016/6/29
thanks,, 就是 conversion 这一块没有细看.... 【 在 nullne 的大作中提到: 】 : [md]Go语言中进行比较的两个操作数首先是必须能够进行比较([Comparable](https://golang.org/ref/spec#Comparison_operators))的,例如两个数字类型的操作数就可以进行比较。其次,比较符号(Comparison operator)的两个操作数必须是能够相互赋值([Assignable](https://golang.org/ref/spec#Assignability))的 : 常量分为有类型(typed)和无类型(untyped)。类似于`/`这种字面量常量是无类型的,无类型的常量有一个默认类型([default type](https://golang.org/ref/spec#Constants)) : 在进行变量赋值的时候,如果没有明确指出其类型,根据其初始化值的类型来确定。如果是一个无类型的常量,此时变量的类型就是该常量的默认类型,而该无类型常量也转化为有类型常量(typed) : ...................