strings.Index用于查找子串首次出现位置,返回索引或-1;可结合切片截取内容、循环查找所有匹配项;存在性判断推荐使用Contains,定位首/尾匹配可用HasPrefix/HasSuffix。

在Go语言中,strings.Index 是最常用的子串查找函数之一。它用于在一个字符串中查找另一个子串首次出现的位置,返回匹配位置的索引(从0开始),如果未找到则返回 -1。这个函数简单高效,适用于大多数基础的字符串搜索场景。
strings.Index 函数基本用法
函数签名如下:
func Index(s, substr string) int它接收两个参数:原字符串 s 和要查找的子串 substr,返回子串在原字符串中第一次出现的下标。
示例代码:
立即学习“go语言免费学习笔记(深入)”;
package mainimport (
"fmt"
"strings"
)
func main() {
str := "hello world"
index := strings.Index(str, "world")
fmt.Println(index) // 输出: 6
notFound := strings.Index(str, "golang")
fmt.Println(notFound) // 输出: -1
}
常见使用场景与技巧
在实际开发中,strings.Index 常用于路径解析、日志分析、配置处理等需要定位关键字的场合。
- 判断子串是否存在:通过判断返回值是否为 -1 来确认子串是否出现在原字符串中
- 截取部分内容:结合返回的索引,使用切片操作提取目标数据
- 循环查找多个匹配项:可基于当前索引继续向后搜索,实现多次匹配
例如,查找所有匹配位置:
func findAll(s, substr string) []int {var indices []int
index := 0
for {
i := strings.Index(s[index:], substr)
if i == -1 {
break
}
index += i
indices = append(indices, index)
index += 1 // 避免死循环,向前移动一位
}
return indices
}
与其他查找函数对比
Go 的 strings 包还提供了其他查找函数,根据需求选择更合适的:
- strings.LastIndex:查找子串最后一次出现的位置
- strings.Contains:仅判断是否包含子串,返回 bool,比 Index 更语义清晰
- strings.IndexAny:查找任意一个字符首次出现位置,适用于字符集合匹配
- strings.HasPrefix / HasSuffix:专门判断前缀或后缀,性能更好
比如只需判断存在性时,推荐使用 Contains:
if strings.Contains(str, "error") {fmt.Println("包含错误信息")
}
基本上就这些。合理使用 strings.Index 及其相关函数,可以高效完成日常开发中的字符串查找任务。不复杂但容易忽略细节,比如边界处理和循环查找时的索引偏移。










