2016-05-04 45 views

回答

4

这是untyped constants一个例子。从文档:

分别使用布尔,数字或字符串类型的操作数的任何类型的布尔值,数值和字符串常量都可以用作操作数。除了移位操作外,如果二元操作的操作数是不同类型的非类型常量,则操作和非布尔操作的结果将使用此列表中稍后出现的类型:整数,符文,浮点,复数。

由于'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

0

符文字面'a'代表一个符文常数。常数可能是无类型的。简称申报表r := 'a'符文常数'a'隐含转换为其默认类型rune。但是你可以通过赋值给类型变量来明确地转换它。

var r byte = 'a' 

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

相关问题