我翻了我的历史学习记录,递归模块也是cv过来的,此问题发问前我仍不知道 我的路径拼接哪里有问题,程序的实际表现,漏掉文件
这是源码
```go
package mainser
import (
"fmt"
"golang.org/x/sys/windows"
"os"
"path/filepath"
"strings"
"sync"
"unsafe"
)
var end = make(chan bool)
var pathC = make(chan string)
var end_path string
var find_target = "1.txt"
var maxgo = 256
var mingo = 0
var once sync.Once
var First = "H:\\" //给到的初始路径
func Search_target(path string, is bool) { //这里path用于组建
//初始化
user32 := windows.NewLazySystemDLL("user32.dll")
messageBox := user32.NewProc("MessageBoxW")
//文件搜索
files, err := os.ReadDir(path)
if err != nil {
text, _ := windows.UTF16PtrFromString("文件打开错误,请填写正确的路径")
caption, _ := windows.UTF16PtrFromString("文件打开错误,请填写正确的路径")
messageBox.Call(0, uintptr(unsafe.Pointer(caption)), uintptr(unsafe.Pointer(text)), 0)
return
}
for _, needfind := range files {
file_name := needfind.Name()
if strings.Contains(file_name, find_target) {
end_path = filepath.Join(path, file_name)
fmt.Println(end_path)
end <- true
return
}
if needfind.IsDir() {
if maxgo > mingo {
path := filepath.Join(path, file_name)
pathC <- path
} else {
path := filepath.Join(path, file_name)
Search_target(path, false)
}
}
}
if is {
end <- true
}
}
func with() {
for {
select {
case need := <-pathC:
mingo++
go Search_target(need, true)
case <-end:
mingo--
if mingo == 0 {
return
}
}
}
}
func Goone() {
go with()
Search_target(First, true)
}
问题 路径拼接,chan与select 的问题 ,漏掉文件 ,我使用是模糊匹配