2.5 字符串

本篇学习 Go 字符串的声明、转义与原始字符串,并能正确处理中文长度与不可变性。

字数 766 字

字符串

概念说明

字符串用于表示一段文本。
在 Go 中,字符串使用双引号或反引号表示,并且字符串是不可变的。

语法/规则

  1. 双引号字符串会处理转义字符,例如 \n\t\"
  2. 反引号字符串是原始字符串,内容按原样保留,常用于多行文本。
  3. 字符串拼接可以使用 +
  4. len(s) 返回的是字节长度,不是字符个数。
  5. 字符串下标可读不可写,不能通过 s[0] = 'x' 修改字符串内容。

声明与转义示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package main

import "fmt"

func main() {
	name := "阿斌"
	message := "你好," + name

	fmt.Println(message)
	fmt.Println("\"Go\" 是一门编程语言")
}

输出结果:

1
2
你好,阿斌
"Go" 是一门编程语言

原始字符串与长度示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {
	text := `第一行
第二行\t不会转义`
	word := "你好" // UTF-8: 你(3字节) + 好(3字节) = 6字节

	fmt.Println(text)
	fmt.Printf("len(word)=%d\n", len(word))                    // len 返回字节数(byte): 6字节 = 48位(bit)
	fmt.Printf("字符数=%d\n", utf8.RuneCountInString(word)) // RuneCount 返回字符(rune)数量: 2
}

输出结果:

1
2
3
4
第一行
第二行\t不会转义
len(word)=6
字符数=2

说明:

  1. len(s) 的单位是字节(byte),不是“字符个数”。
  2. 1 byte = 8 bit,所以 len("你好") == 6 的含义是“6 个字节(即 6 个 8 位,共 48 位)”。
  3. Go 字符串默认按 UTF-8 存储,常见中文(如 )通常各占 3 个字节,所以一共是 6 个字节。
  4. 如果要统计“字符个数”,使用 utf8.RuneCountInString 更直观。

可对比理解:

  • len("A") == 1(英文/ASCII 常见 1 字节)
  • len("你") == 3(中文常见 3 字节)
  • len("😀") == 4(Emoji 常见 4 字节)

常见错误

  1. 用单引号定义字符串,例如 'hello',会编译报错。
  2. 误以为 len("你好") 返回 2,实际返回的是 UTF-8 字节数 6。
  3. 试图通过下标直接修改字符串内容,会出现 cannot assign to 编译错误。
使用 Hugo 构建
主题 StackJimmy 设计 由 Hobin 魔改
载入天数...载入时分秒...
发表了 0 篇文章 · 发表了 46 篇笔记 · 总计 2 万 5 千字(其中笔记 25104 字)