我正在尝试搜索目录中文件中的特定单词,并将所有文件中的每个实例转换为大写。
我想跟踪找到该单词的文件以及它在这些文件中出现的时间。
到目前为止,我能够阅读该文件的内容 然后如何从main函数发送参数来搜索文件并将这些实例替换为大写?
这是我到目前为止所做的:
func visit(path string, fi os.FileInfo, err error) error {
if err!=nil{
return err
}
if !!fi.IsDir(){
return nil //
}
matched, err := filepath.Match("*.txt", fi.Name())
if err !=nil{
fmt.Println(err)
return err
}
if matched{
read,err:= ioutil.ReadFile(path)
fmt.Println(read)
check(err)
fmt.Println(path) }
return nil
}
func main() {
err := filepath.Walk(".", visit)
}
答案 0 :(得分:1)
您可以使用由callback
filepath.Walk
函数文字看到的变量作为闭包。
例如,请参阅" GOLANG: Walk Directory Tree and Process Files"。
func main() {
var yourWord := "a word"
callback := func(path string, fi os.FileInfo, err error) error {
// do something with yourWord!
}
filepath.Walk(".", callback)
}
这意味着:
visit
(不能使用任何其他参数调用,例如yourWord
)callback
之前定义filepath.Walk
功能( function literal )
详情请见" Codewalk: First-Class Functions in Go" 可以在Go中声明匿名函数 函数文字是闭包:它们继承了声明它们的函数的范围 它们可以引用周围函数中定义的变量。然后,这些变量在周围函数和函数文本之间共享,只要它们可访问,它们就会存在。
在您的情况下,'回调' function literal将继承之前定义的变量yourWord
。
注意:要调用的函数是strings.ToUpper()
,而不是strings.toUpper()
。