Golang 第三章 5.字符串

  • By v2ray节点

  • 2026-03-19 14:55:32

  • 评论

在 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正确遍历字符


v2ray节点购买