- 字面量是指由字母、数字等构成的字符串或数值,它只能作为右值出现。
整数字面量#
- 表示整数常量的数字序列。
42 // 十进制
0600 // 八进制 6*8^2 + 0*8^1 + 0*8^0
oxBadFace // 十六进制 11*16^6 + 10*16^5 + ...
ob11110000 // 二进制
ob1111_0000 // 二进制
1
2
3
4
5
6
7
8
|
func Example() {
var o int = 067 // 6*8+7
var ox int = 0xBa77 // 11*16^3 + 10*16^2 + 7*16 + 7
fmt.Println(o, ox)
// Output:
// 55 47735
}
|
浮点数字面量#
- 浮点常量的十进制表示。
- 科学计数法:一个整数部分、一个小数点、一个小数部分和一个指数部分。
0. // 0
72.40 // 72.4
072.40 // 72.4
2.712
1.e+0
6.654e-11 // 科学计数法 6.654 * 10^-11
1E6
.25 // 0.25
.12345E+5 // 0.12345E+5
1
2
3
4
5
6
7
|
func Example() {
a, b, c, d := 0., 072.40, 1.e+0, .1254E+5
fmt.Println(a, b, c, d)
// Output:
// 0 72.4 1 12540
}
|
虚数字面量#
- 虚数字面量是复数常数的虚数的十进制表示。
0i
011i // 11i
0.1
2.2454i
1.e+0i
6.67e-11i
1E6i
.25i
1
2
3
4
5
6
7
|
func Example() {
a, b, c, d := 0i, 011i, 0.1, 6.67e-11i
fmt.Println(a, b, c, d)
// Output:
// (0+0i) (0+11i) 0.1 (0+6.67e-11i)
}
|
Rune字面量#
Rune |
别名 |
长度 |
范围 |
rune |
int32 |
4B |
-2147483648 ~ 2147483647 |
Rune
字面量是标识Unicode
代码点的整数值。(Unicode
是定长两个字节)
Rune
字面量表示用单引号括起来的一个或多个字符。'x'
或'\n'
。
- 单引号字符表示字符本身的
Unicode
值。而以反斜杠开头的字符序列表示各种格式编码值。
Go
源码是以UTF-8
编码的Unicode
字符,因此多个UTF-8
编码的字节可以表示单个整数值。
'a'
表示是a的单个字节,Unicode U+0061
,值为0x61
。
- “好” 编码
0x597d
包含两个字节 ,U+00E4
值为0xe4
。
- 将整数值表示为数字常量。
\x
后跟恰好两个十六进制数字\x00 ~ \xff
(0 ~ 255)
1B
(2^8)
1字节。
\u
后跟恰好四个十六进制数字\u0000 ~ \uffff
(0 ~ 65535)
2B
(2^16)
2字节。
\U
后跟恰好八个十六进制数字\U00000000 ~ \Uffffffff
(0 ~ 4294967295)
4B
4字节。
\
后跟恰好三个八进制数字\000 ~ \777
(0 ~ 511)
。
Unicode
最大值 0x10FFF
69631
。
'a'
'笨'
'\t'
'\000'
'\007'
'\xff'
'\u12e4'
'\U00101234'
'aa' // 非法 多个字符
'\xa' // 非法 十六进制数字太少
'\0' // 非法八进制数字不正确
'\U001000000' // 非法 无效的Unicode代码点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
func Example() {
// rune = int32
// byte = uint8
var a rune = '\n'
var b rune = '好'
var c byte = '\007'
var d rune = '\xff'
var e rune = '\u12e4'
fmt.Println(a, b, c, d, e)
fmt.Printf("%c %c %c %c %c", a, b, c, d, e)
// Output:
// 10 22909 7 255 4836
//
// 好 ÿ ዤ
}
|
字符串字面量#
- 原始字符串字面量:反引号之间的字符序列。
- 解释的字符串:双引号之间的字符序列。
- 在双引号内,除了换行符和未转义的双引号外,任何字符都可以出现。
- 引号之间的文本形成文字的
rune
值,反斜杠转义符被解释为符文(rune
)。
`abc` // "abc"
`\n
\n` // "\\n\n\\n"
"\n"
"\"" // `"`
"Hello,World!\n"
"洒水"
"\u65e5 本\U00008a9e"
"\xff\u00FF"