文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
Rune 字面值
rune 类型字面值相当于一个 rune 常量。它是一个表示 Unicode 代码点的整数。rune 类型字面值表示为用单引号包裹的一个或多个字符,像 'x' 或 '\n'。在单引号中除了换行符和未转义的单引号其他的字符都可以直接显示。单引号包裹的字符的值和字符在 Unicode 编码中的值相等,而以反斜线开头的多字符序列会把值翻译成多种格式。
使用引号表示单字符是最简单的方式;因为 Go 的源文本是 UTF-8 编码,一个整数可能代表多个 UTF-8 字节。例如, 'a' 可以使用单字节表示字符 a,Unicode 编码 U+0061,值 0x61,而 'ä' 是两字节表示分音符的 a,Unicode 编码 U+00E4,值 0xe4。
反斜线能将任意值编码成 ASCII 文本。有四种方式将整数值表示为数字常量: \x
后接两个十六进制数; \u
后接四个十六进制数; \U
后接八个十六进制数。 \
后接三个八进制数。每种情况下都使用相应进制来表示字面量的整数值。
虽然这四种方式都以整数表示,但它们的有效区间并不相同。八进制只能表示 0 - 255 以内的整数。十六进制满可以满足需求。 \u
和 \U
都可以表示 Unicode 代码点,不过其中的一些值是无效的,特别是 0x10FFFF 以上的值。
反斜线结合以下字符具有特殊含义:
\a U+0007 alert or bell
\b U+0008 退格符
\f U+000C form feed
\n U+000A line feed or newline
\r U+000D carriage return
\t U+0009 水平制表符
\v U+000b 垂直制表符
\\ U+005c 反斜线
\' U+0027 单引号 (只在 rune 字面值中有效)
\" U+0022 双引号 (只在字符串字面值中有效)
其他所有以反斜线开头的序列在 rune 的规则中都是非法的。
rune_lit = "'" ( unicode_value | byte_value ) "'" .
unicode_value = unicode_char | little_u_value | big_u_value | escaped_char .
byte_value = octal_byte_value | hex_byte_value .
octal_byte_value = `\` octal_digit octal_digit octal_digit .
hex_byte_value = `\` "x" hex_digit hex_digit .
little_u_value = `\` "u" hex_digit hex_digit hex_digit hex_digit .
big_u_value = `\` "U" hex_digit hex_digit hex_digit hex_digit
hex_digit hex_digit hex_digit hex_digit .
escaped_char = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
'a'
'ä'
'本'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'
'\'' // 包含单引号的 rune 字面值
'aa' // 无效: 太多字符
'\xa' // 无效: 缺少十六进制数
'\0' // 无效: 缺少八进制数
'\uDFFF' // 无效: surrogate half
'\U00110000' // 无效: 非法的 Unicode 代码点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论