ch3,ch3-01 review

This commit is contained in:
chai2010
2015-12-27 15:13:12 +08:00
parent 7c96bf43e6
commit 6978661750
21 changed files with 67 additions and 63 deletions

View File

@@ -30,7 +30,7 @@ func dirents(dir string) []os.FileInfo {
ioutil.ReadDir函數會返迴一個os.FileInfo類型的sliceos.FileInfo類型也是os.Stat這個函數的返迴值。對每一個子目録而言walkDir會遞歸地調用其自身併且會對每一個文件也遞歸調用。walkDir函數會向fileSizes這個channel發送一條消息。這條消息包含了文件的字節大小。
下面的主函數用了兩個goroutine。後的goroutine調用walkDir來遍歷命令行給出的每一個路徑併最終關閉fileSizes這個channel。主goroutine會對其從channel中接收到的文件大小進行纍加併輸出其和。
下面的主函數用了兩個goroutine。後的goroutine調用walkDir來遍歷命令行給出的每一個路徑併最終關閉fileSizes這個channel。主goroutine會對其從channel中接收到的文件大小進行纍加併輸出其和。
```go
@@ -84,7 +84,7 @@ $ ./du1 $HOME /usr /bin /etc
如果在運行的時候能夠讓我們知道處理進度的話想必更好。但是如果簡單地把printDiskUsage函數調用移動到循環里會導致其打印出成百上韆的輸出。
下面這個du的變種會間歇打印內容不過隻有在調用時提供了-v的flag才會顯示程序進度信息。在roots目録上循環的後goroutine在這里保持不變。主goroutine現在使用了計時器來每500ms生成事件然後用select語句來等待文件大小的消息來更新總大小數據或者一個計時器的事件來打印當前的總大小數據。如果-v的flag在運行時沒有傳入的話tick這個channel會保持爲nil這樣在select里的case也就相當於被禁用了。
下面這個du的變種會間歇打印內容不過隻有在調用時提供了-v的flag才會顯示程序進度信息。在roots目録上循環的後goroutine在這里保持不變。主goroutine現在使用了計時器來每500ms生成事件然後用select語句來等待文件大小的消息來更新總大小數據或者一個計時器的事件來打印當前的總大小數據。如果-v的flag在運行時沒有傳入的話tick這個channel會保持爲nil這樣在select里的case也就相當於被禁用了。
```go
gopl.io/ch8/du2