我已經(jīng)編寫(xiě)了以下代碼以便運(yùn)行直到有人手動(dòng)退出程序。它確實(shí)是----- 每 1 秒檢查一次是否存在----- 如果可用則讀取文件并逐行打印文件內(nèi)容為此,我首先從 main 調(diào)用一個(gè)函數(shù),然后我調(diào)用一個(gè) waitgroup 并從那里再次調(diào)用一個(gè)函數(shù)來(lái)完成上述任務(wù)。請(qǐng)檢查我是否正確編寫(xiě)了源代碼,因?yàn)槲沂?GO 的新手加上這只運(yùn)行一次并停止......我想讓它保持活力并查看文件是否存在請(qǐng)幫我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貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
簡(jiǎn)短的回答是你在循環(huán)中有這個(gè):
wg.Done()
這使得主 goroutine 在文件被讀取一次后立即退出。
更長(zhǎng)的答案是您沒(méi)有在這里正確使用等待組,恕我直言。例如,將 a 傳遞給 絕對(duì)沒(méi)有WaitGroup意義looping。
目前尚不清楚您的代碼試圖完成什么 - 您當(dāng)然不需要任何 goroutines 來(lái)執(zhí)行您指定的任務(wù) - 它可以在沒(méi)有并發(fā)的情況下全部消失,因此代碼更簡(jiǎn)單。
- 1 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)
0/150
提交
取消
