Go 语言对字符串的操作分为两大核心包:
strings:字符串增删查改、分割、匹配、截取等处理strconv:字符串与基本数据类型(bool/int/float)互相转换本文
一、strings 包:字符串常用操作
1. Contains 判断子串是否存在
语法:strings.Contains(s, substr string) bool作用:判断字符串 s 是否包含子串 substr,存在返回 true,不存在返回 false
go
Go
package main
import (
"fmt"
"strings"
)
func main() {
str := "hellogo"
res1 := strings.Contains(str, "hello")
res2 := strings.Contains(str, "java")
fmt.Println(res1) // true
fmt.Println(res2) // false
}
2. Join 拼接切片内字符串
语法:strings.Join(strs []string, sep string) string作用:使用指定分隔符,将字符串切片拼接成一个完整字符串
go
Go
func main() {
arr := []string{"a", "b", "go"}
res := strings.Join(arr, ",")
fmt.Println(res) // a,b,go
}
3. Index 查找子串下标位置
语法:strings.Index(s, substr string) int作用:返回子串第一次出现的索引;不存在返回 -1
go
Go
func main() {
str := "helloworld"
index := strings.Index(str, "world")
fmt.Println(index) // 5
}
4. Split 按分隔符拆分字符串
语法:strings.Split(s, sep string) []string作用:以指定分隔符切割字符串,返回字符串切片
go
Go
func main() {
str := "java,go,python"
slice := strings.Split(str, ",")
fmt.Println(slice) // [java go python]
}
5. Trim 去除字符串首尾指定字符
语法:strings.Trim(s, cutset string) string作用:清除字符串两头包含在 cutset 中的所有字符
go
Go
func main() {
str := " ##hello## "
res := strings.Trim(str, " #")
fmt.Println(res) // hello
}
6. Fields 按空白分割
语法:strings.Fields(s string) []string作用:自动忽略连续空格、制表符、换行符,拆分出有效文本切片
go
Go
func main() {
str := " go java python "
slice := strings.Fields(str)
fmt.Println(slice) // [go java python]
}
二、strconv 包:字符串与基础类型互转
go
Go
import (
"fmt"
"strconv"
)
1. Append 系列:类型转字符串并追加到 byte 切片
适合高性能拼接场景,直接操作字节数组,减少内存拷贝
AppendBool(dst []byte, b bool) []byte:追加布尔值AppendInt(dst []byte, i int64, base int) []byte:追加数字,base 代表进制(10 = 十进制)AppendQuote(dst []byte, s string) []byte:追加带双引号的字符串
完整示例:
go
Go
func main() {
// 初始化容量1024的字节切片
slice := make([]byte, 0, 1024)
// 追加布尔
slice = strconv.AppendBool(slice, true)
// 追加十进制数字1234
slice = strconv.AppendInt(slice, 1234, 10)
// 追加带引号字符串
slice = strconv.AppendQuote(slice, "abcgohello")
// byte切片转string打印
fmt.Println("slice = ", string(slice))
}
2. Format 系列:其他类型 → 字符串
2.1 FormatBool 布尔转字符串
go
Go
str := strconv.FormatBool(false)
fmt.Println(str) // "false"
2.2 FormatFloat 浮点数转字符串
函数签名:FormatFloat(f float64, fmt byte, prec, bitSize int) string参数说明:
f:待转换浮点数fmt:格式标识,'f'普通小数格式prec:小数点保留位数,-1自动适配bitSize:32/float32、64/float64
go
Go
str := strconv.FormatFloat(3.14, 'f', -1, 64)
fmt.Println(str) // 3.14
2.3 Itoa 整型数字转字符串
等价于 FormatInt(int64(num), 10)
go
Go
str := strconv.Itoa(66666)
fmt.Println(str) // "66666"
3. Parse 系列:字符串 → 其他类型(会返回 error)
转换失败时 err 不为空,业务中必须判断错误
3.1 ParseBool 字符串转布尔
仅支持 "true" / "false",其他字符串转换报错
go
Go
func main() {
var flag bool
var err error
flag, err = strconv.ParseBool("true")
if err == nil {
fmt.Println("flag = ", flag)
} else {
fmt.Println("转换失败 err = ", err)
}
}
3.2 Atoi 数字字符串转 int
Atoi = ParseInt 十进制简化版,下划线忽略错误(简单场景使用)
go
Go
a, _ := strconv.Atoi("567")
fmt.Println(a) // 567
三、完整可运行整合 Demo
go
Go
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
// ========== strings 包测试 ==========
s := "hellogo,golang"
fmt.Println("Contains(hello):", strings.Contains(s, "hello"))
fmt.Println("Index(go):", strings.Index(s, "go"))
fmt.Println("Split:", strings.Split(s, ","))
fieldStr := " go java "
fmt.Println("Fields:", strings.Fields(fieldStr))
fmt.Println("Trim:", strings.Trim("###golang###", "#"))
joinSlice := []string{"2026", "07", "18"}
fmt.Println("Join:", strings.Join(joinSlice, "-"))
fmt.Println("========================")
// ========== strconv Append ==========
slice := make([]byte, 0, 128)
slice = strconv.AppendBool(slice, true)
slice = strconv.AppendInt(slice, 999, 10)
slice = strconv.AppendQuote(slice, "go笔记")
fmt.Println("Append结果:", string(slice))
// ========== Format 类型转字符串 ==========
str1 := strconv.FormatBool(true)
str2 := strconv.FormatFloat(2.5, 'f', 2, 64)
str3 := strconv.Itoa(888)
fmt.Println("Format转换:", str1, str2, str3)
// ========== Parse 字符串转类型 ==========
b, err := strconv.ParseBool("false")
if err == nil {
fmt.Println("ParseBool:", b)
}
num, _ := strconv.Atoi("12345")
fmt.Println("Atoi:", num)
}
四、核心知识点总结(复习重点)
strings 包速记
Contains:判断是否包含子串Index:查找子串索引,无则返回 - 1Split:按分隔符拆分字符串为切片Trim:清除首尾指定字符Fields:自动切割所有空白,提取有效单词Join:切片拼接为完整字符串
strconv 包速记
- Append:追加到 byte 切片,高性能拼接
- Format :基础类型 → string
- FormatBool / FormatFloat / Itoa(int 转字符串)
- Parse :string → 基础类型,返回 error 捕获非法转换
- ParseBool / Atoi(数字字符串转 int)