简要说明一下Golang 单引号,双引号,反引号的区别?

参考回答

在 Golang 中,单引号 (')、双引号 (")、反引号 (`) 用于表示不同类型的字面值,具体区别如下:

  1. 单引号 ('):
    • 用于表示单个字符(rune 类型)。
    • 实际上是表示一个 Unicode 码点,占用 4 个字节。

    示例:

    var c rune = 'A' // 表示字符 A 的 Unicode 码点
    fmt.Println(c)    // 输出: 65 (ASCII 值)
    
  2. 双引号 ("):
    • 用于表示字符串(string 类型)。
    • 支持转义字符,如 \n 表示换行,\" 表示双引号。

    示例:

    var s string = "Hello\nWorld"
    fmt.Println(s)
    // 输出:
    // Hello
    // World
    
  3. 反引号 (`):
    • 用于表示 原始字符串string 类型)。
    • 不支持转义字符,内容按字面值存储,包括换行和特殊字符。

    示例:

    var raw string = `Hello\nWorld`
    fmt.Println(raw)
    // 输出:
    // Hello\nWorld
    

详细讲解与拓展

1. 单引号:'

  • 本质: 表示 rune 类型(等价于一个 32 位的整数)。
  • 单引号中的内容必须是单个字符:
    var c1 rune = 'A'    // 正确
    var c2 rune = '😀'   // 正确
    var c3 rune = 'AB'   // 错误,只能有一个字符
    
  • 可以通过单引号获取字符的 Unicode 值(码点):
    fmt.Printf("%c -> %U\n", 'A', 'A') // 输出: A -> U+0041
    

2. 双引号:"

  • 本质: 表示字符串(string 类型)。
  • 支持转义字符,例如:
    var s string = "Line1\nLine2"
    fmt.Println(s)
    // 输出:
    // Line1
    // Line2
    
  • 双引号可以用来包含 Unicode 字符:
    s := "Hello, 世界"
    fmt.Println(s) // 输出: Hello, 世界
    

3. 反引号:`

  • 本质: 表示原始字符串(string 类型)。
  • 所见即所得,支持多行,常用于写入代码片段、HTML 等内容。
    raw := `Hello
    World`
    fmt.Println(raw)
    // 输出:
    // Hello
    // World
    
  • 不支持转义字符:
    raw := `Hello\nWorld`
    fmt.Println(raw)
    // 输出:
    // Hello\nWorld
    
  • 常见用途:
    • 表示文件路径:
    path := `C:\Users\Gopher`
    fmt.Println(path) // 输出: C:\Users\Gopher
    
    • 嵌入 HTML、SQL 等代码片段:
    sql := `SELECT * FROM users WHERE name="John"`
    fmt.Println(sql)
    

总结

  1. 单引号 ('):
    • 表示单个字符,类型是 rune(4 字节 Unicode 码点)。
  2. 双引号 ("):
    • 表示字符串,类型是 string
    • 支持转义字符,常用于一般字符串操作。
  3. 反引号 (`):
    • 表示原始字符串,类型也是 string
    • 所见即所得,支持多行和直接包含特殊字符。

发表评论

后才能评论