第 8 章 / 共 20 章
字符串
字符串本质、rune、strings 包
字符串是不可变的字节序列
string 底层是只读的 UTF-8 字节数组。索引 s[i] 拿到的是 byte(uint8),不是字符。
package main
import "fmt"
func main() {
s := "你好"
fmt.Println(len(s)) // 6(UTF-8 字节数)
fmt.Println(s[0]) // 228(第一个字节)
}rune 与遍历字符
rune 是 int32 别名,表示一个 Unicode 码点。range 遍历会自动按 UTF-8 解码。
package main
import "fmt"
func main() {
for i, r := range "你好" {
fmt.Printf("%d %c %U\n", i, r, r)
}
// 输出:
// 0 你 U+4F60
// 3 好 U+597D
}拼接性能
+ 拼接每次产生新字符串。大量拼接请用 strings.Builder。
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
for i := 0; i < 1000; i++ {
b.WriteString("x")
}
s := b.String()
fmt.Println(len(s))
}常用 strings 包函数
- strings.Contains / HasPrefix / HasSuffix
- strings.Split / Join
- strings.ReplaceAll / TrimSpace / ToLower
- strconv.Itoa / Atoi 数字 ⇄ 字符串