4.fmt包(格式化字符串)
fmt 包主要用于格式化字符串,类似于 C 语言的 printf。
4.1 字符串格式化
- fmt.Sprintf(format string, a ...interface{}) string
格式化字符串并返回,不打印到标准输出
s := fmt.Sprintf("My age is %d", 25)
fmt.Println(s) // "My age is 25"
- fmt.Fprintf(writer io.Writer, format string, a ...interface{}) (int, error)
将格式化字符串写入 io.Writer(如文件、网络等)
fmt.Fprintf(os.Stdout, "Hello %s\n", "World") // 输出: Hello World
4.2 格式化占位符
占位符 | 说明 |
%s | 字符串 |
%d | 整数(十进制) |
%f | 浮点数 |
%t | 布尔值 |
%v | 任意值 |
%T | 显示变量的类型 |
%q | 带双引号的字符串 |
5.unicode包(字符处理)
unicode 包用于处理 Unicode 字符,例如判断字符类型(字母、数字、标点符号等)。
5.1 判断字符类型
- unicode.IsDigit(r rune) bool
判断字符是否是数字
fmt.Println(unicode.IsDigit('9')) // true
- unicode.IsLetter(r rune) bool
判断字符是否是字母
fmt.Println(unicode.IsLetter('A')) // true
fmt.Println(unicode.IsLetter('9')) // false
- unicode.IsSpace(r rune) bool
判断字符是否是空白字符(如 \t、\n、 等)
fmt.Println(unicode.IsSpace(' ')) // true
- unicode.ToUpper(r rune) rune
将字符转换为大写
fmt.Println(string(unicode.ToUpper('a'))) // "A"
6.regexp包(正则表达式)
regexp 包提供了正则表达式支持,适用于复杂的字符串匹配、查找和替换操作。
6.1 编译正则表达式
- regexp.Compile(pattern string) (*regexp.Regexp, error)
编译正则表达式
re, err := regexp.Compile(`\d+`)
fmt.Println(re.MatchString("123abc")) // true
- regexp.MustCompile(pattern string) *regexp.Regexp
与 Compile 相同,但如果编译失败则直接 panic
re := regexp.MustCompile(`\d+`)
fmt.Println(re.MatchString("hello")) // false
6.2 查找和替换
- re.FindString(s string) string
查找第一个匹配的字符串
fmt.Println(re.FindString("abc123xyz")) // "123"
- re.ReplaceAllString(s, repl string) string
使用 repl 替换所有匹配的字符串
fmt.Println(re.ReplaceAllString("abc123xyz", "###")) // "abc###xyz"
- re.FindAllString(s string, n int) []string
查找所有匹配的字符串,n=-1 表示查找所有
fmt.Println(re.FindAllString("abc123xyz456", -1)) // ["123" "456"]
7.bytes包(高效字符串处理)
在 Go 语言中,字符串是不可变的,而 []byte 可以修改,因此 bytes 包提供了一些类似 strings 包的高效操作方法。
7.1strings对应的bytes版本
strings 方法 | bytes 方法 | 说明 |
strings.Contains | bytes.Contains | 是否包含 |
strings.Split | bytes.Split | 按分隔符拆分 |
strings.Trim | bytes.Trim | 去除指定字符 |
strings.ToUpper | bytes.ToUpper | 转大写 |
strings.ToLower | bytes.ToLower | 转小写 |
示例:
fmt.Println(bytes.ToUpper([]byte("hello"))) // "HELLO"
8.strings.Builder(高效字符串拼接)
在 Go 语言中,字符串是不可变的,因此频繁拼接字符串时,建议使用 strings.Builder,它比 + 或 fmt.Sprintf 更高效。
8.1 使用strings.Builder
var builder strings.Builder
builder.WriteString("Hello")
builder.WriteString(" ")
builder.WriteString("World")
fmt.Println(builder.String()) // "Hello World"
优点
- 性能更高:避免创建多个临时字符串,减少内存分配。
- API 友好:提供 WriteString、WriteByte 等方法,易于操作。
9.runes(处理 Unicode 字符串)
Go 语言的 string 是 不可变的 UTF-8 字节序列,所以直接操作字符串的索引可能会导致乱码。为了正确处理 Unicode 字符,可以使用 rune 类型。
9.1 遍历 Unicode 字符串
s := "你好,Go!"
for i, r := range s {
fmt.Printf("Index: %d, Rune: %c\n", i, r)
}
总结
类型 | 相关包 | 关键函数 |
字符串操作 | strings | Contains、Split、Replace、Trim |
数值转换 | strconv | Itoa、Atoi、FormatFloat |
格式化 | fmt | Sprintf、Fprintf |
正则匹配 | regexp | Compile、FindString、ReplaceAllString |
Unicode | unicode | IsDigit、ToUpper |
高效处理 | bytes | ToUpper、Split、Trim |
字符串拼接 | strings.Builder | WriteString |