Golang 第三章 5.字符串
在 Go 中,字符串是一个 不可变的字节序列,通常用于表示 UTF-8 编码的文本。
字符串的定义
字符串字面量可以用两种方式表示:
1️⃣ 双引号(常用)
s := "Hello, 世界"特点:
- 支持转义字符
- 按 UTF-8 编码存储
2️⃣ 反引号(原始字符串)
s := `Hello
World`特点:
- 不会转义
- 可以写多行
- 常用于:HTML / JSON / 正则
字符串是不可变的
Go 字符串 不能修改某个字符:
❌ 错误:
s := "hello"
s[0] = 'H'✔ 正确做法:
s := "hello"
s2 := "H" + s[1:]字符串长度
len(s)返回的是:
👉 字节数(不是字符数)
示例:
s := "世界"
fmt.Println(len(s))输出:
6原因:
- 每个中文字符 = 3 字节(UTF-8)
字符访问(按字节)
s := "hello"
fmt.Println(s[0]) // 104 ('h')⚠️ 注意:
"世界"[0]得到的只是:
👉 第一个字节,不是完整字符
rune(字符)
Go 用 rune 表示一个 Unicode 字符:
r := '世'本质:
int32正确遍历字符串(按字符)
使用 range:
s := "Hello 世界"
for i, r := range s {
fmt.Printf("%d %c\n", i, r)
}输出:
0 H
1 e
2 l
3 l
4 o
5
6 世
9 界👉 注意:
- index 是 字节位置
- r 是 字符(rune)
字符串转换
string → []byte
s := "hello"
b := []byte(s)[]byte → string
s := string(b)string → []rune
r := []rune(s)适合处理:
👉 中文 / emoji
字符串拼接
方法1:+
s := "Hello " + "World"方法2:fmt
s := fmt.Sprintf("%s %s", "Hello", "World")方法3(高效):strings.Builder
var b strings.Builderb.WriteString("Hello")
b.WriteString(" World")
s := b.String()👉 高频拼接推荐这个(性能好)
常用字符串函数
import "strings"
| 函数 | 作用 |
|---|---|
| strings.Contains | 是否包含 |
| strings.HasPrefix | 前缀 |
| strings.HasSuffix | 后缀 |
| strings.Index | 查找位置 |
| strings.Replace | 替换 |
| strings.Split | 分割 |
| strings.Join | 拼接 |
示例
s := "hello world"
fmt.Println(strings.Contains(s, "world"))
fmt.Println(strings.Split(s, " "))输出:
true
[hello world]字符串比较
fmt.Println("abc" == "abc") // true
fmt.Println("abc" < "bcd") // true👉 按 字典序(字节)比较
UTF-8 重点总结
| 概念 | 含义 |
|---|---|
| string | 字节序列 |
| len() | 字节数 |
| rune | 字符 |
| range | 正确遍历字符 |



评论