• 字面量是指由字母、数字等构成的字符串或数值,它只能作为右值出现。

整数字面量

  1. 表示整数常量的数字序列。
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
}

浮点数字面量

  1. 浮点常量的十进制表示。
  2. 科学计数法:一个整数部分、一个小数点、一个小数部分和一个指数部分。
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
}

虚数字面量

  1. 虚数字面量是复数常数的虚数的十进制表示。
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
  1. Rune字面量是标识Unicode代码点的整数值。(Unicode是定长两个字节)
  2. Rune字面量表示用单引号括起来的一个或多个字符。'x''\n'
  3. 单引号字符表示字符本身的Unicode值。而以反斜杠开头的字符序列表示各种格式编码值。
  4. Go源码是以UTF-8编码的Unicode字符,因此多个UTF-8编码的字节可以表示单个整数值。
    • 'a'表示是a的单个字节,Unicode U+0061,值为0x61
    • “好” 编码0x597d包含两个字节 ,U+00E4值为0xe4
  5. 将整数值表示为数字常量。
    • \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)
  6. 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
    //
    //  好  ÿ ዤ
}

字符串字面量

  1. 原始字符串字面量:反引号之间的字符序列。
  2. 解释的字符串:双引号之间的字符序列。
    • 在双引号内,除了换行符和未转义的双引号外,任何字符都可以出现。
    • 引号之间的文本形成文字的rune值,反斜杠转义符被解释为符文(rune)。
`abc`       // "abc"
`\n
\n`         // "\\n\n\\n"
"\n"		
"\""        // `"`
"Hello,World!\n"
"洒水"
"\u65e5 本\U00008a9e"
"\xff\u00FF"