我已经编写了以下代码以便运行直到有人手动退出程序。它确实是----- 每 1 秒检查一次是否存在----- 如果可用则读取文件并逐行打印文件内容为此,我首先从 main 调用一个函数,然后我调用一个 waitgroup 并从那里再次调用一个函数来完成上述任务。请检查我是否正确编写了源代码,因为我是 GO 的新手加上这只运行一次并停止......我想让它保持活力并查看文件是否存在请帮我package mainimport ( "encoding/csv" "fmt" "io" "log" "os" "sync" "time")func main() { mainfunction()}//------------------------------------------------------------------func mainfunction() { var wg sync.WaitGroup wg.Add(1) go filecheck(&wg) wg.Wait() fmt.Printf("Program finished \n")}func filecheck(wg *sync.WaitGroup) { for range time.Tick(time.Second * 1) { fmt.Println("Foo") var wgi sync.WaitGroup wgi.Add(1) oldName := "test.csv" newName := "testi.csv" if _, err := os.Stat(oldName); os.IsNotExist(err) { fmt.Printf("Path does not exsist \n") } else { os.Rename(oldName, newName) if err != nil { log.Fatal(err) } looping(newName, &wgi) } fmt.Printf("Test complete \n") wgi.Wait() wg.Done() time.Sleep(time.Second * 5) }}func looping(newName string, wgi *sync.WaitGroup) { file, _ := os.Open(newName) r := csv.NewReader(file) for { record, err := r.Read() if err == io.EOF { break } if err != nil { log.Fatal(err) } var Date = record[0] var Agent = record[1] var Srcip = record[2] var Level = record[3] fmt.Printf("Data: %s Agent: %s Srcip: %s Level: %s\n", Date, Agent, Srcip, Level) } fmt.Printf("Test complete 2 \n") wgi.Done() fmt.Printf("for ended")}
1 回答
皈依舞
TA贡献1851条经验 获得超3个赞
简短的回答是你在循环中有这个:
wg.Done()
这使得主 goroutine 在文件被读取一次后立即退出。
更长的答案是您没有在这里正确使用等待组,恕我直言。例如,将 a 传递给 绝对没有WaitGroup
意义looping
。
目前尚不清楚您的代码试图完成什么 - 您当然不需要任何 goroutines 来执行您指定的任务 - 它可以在没有并发的情况下全部消失,因此代码更简单。
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消