Go语言实现文件搜索需打开文件并逐行读取,使用strings.Contains进行关键词匹配或regexp包支持正则搜索,结合filepath.Walk遍历目录,可扩展忽略大小写、高亮显示及并发搜索功能。

在Go语言中实现文件内容搜索功能,可以通过读取文件、逐行扫描并匹配关键词来完成。核心思路是打开文件,按行读取内容,使用字符串或正则表达式进行匹配,并输出匹配的行号和内容。
使用 bufio.Scanner 逐行读取文件,结合 strings.Contains 判断是否包含目标关键词。
示例代码:
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func searchInFile(filename, keyword string) error {
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
lineNum := 0
for scanner.Scan() {
lineNum++
line := scanner.Text()
if strings.Contains(line, keyword) {
fmt.Printf("Line %d: %s\n", lineNum, line)
}
}
return scanner.Err()
}
func main() {
err := searchInFile("example.txt", "hello")
if err != nil {
fmt.Println("Error:", err)
}
}
若需要更灵活的匹配模式(如模糊匹配、数字提取等),可使用 regexp 包。
立即学习“go语言免费学习笔记(深入)”;
示例代码:
package main
import (
"bufio"
"fmt"
"os"
"regexp"
)
func searchWithRegex(filename, pattern string) error {
re, err := regexp.Compile(pattern)
if err != nil {
return err
}
file, err := os.Open(filename)
if err != nil {
return err
}
defer file.Close()
scanner := bufio.NewScanner(file)
lineNum := 0
for scanner.Scan() {
lineNum++
line := scanner.Text()
if re.MatchString(line) {
fmt.Printf("Match at Line %d: %s\n", lineNum, line)
}
}
return scanner.Err()
}
func main() {
err := searchWithRegex("log.txt", `\d{4}-\d{2}-\d{2}`)
if err != nil {
fmt.Println("Error:", err)
}
}
结合 filepath.Walk 遍历目录中的所有文件,对每个文件执行搜索。
示例片段:
func searchInDir(rootDir, keyword string) {
filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return nil // 忽略无法访问的文件
}
if !info.IsDir() && strings.HasSuffix(info.Name(), ".txt") {
fmt.Printf("\nSearching in: %s\n", path)
searchInFile(path, keyword)
}
return nil
})
}
让搜索功能更实用:
基本上就这些。Go标准库足够强大,无需依赖外部包即可实现高效文件内容搜索。关键是合理使用 bufio 和 regexp,注意错误处理和资源释放。不复杂但容易忽略细节。
以上就是Golang如何实现文件内容搜索功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号