1 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
以下循環(huán)掛起,因?yàn)閏hashes未關(guān)閉。
for hash := range chashes {
fmt.Println(hash)
}
chashes在所有哈希器完成后通過(guò)關(guān)閉來(lái)修復(fù)。使用 sync.WaitGroup 等待哈希器完成。
func generateHash(cfiles chan string, chashes chan string) {
var wg sync.WaitGroup
for filename := range cfiles {
wg.Add(1)
go func(filename string) {
defer wg.Done()
var checksum string
var oError bool = false
file, err := os.Open(filename)
if err != nil {
oError = true
errorMsg := "ERROR: " + err.Error()
log.Println(errorMsg)
checksum = errorMsg
}
defer file.Close()
if !oError {
hash := sha256.New()
if _, err := io.Copy(hash, file); err != nil {
errorMsg := "ERROR: " + err.Error()
log.Println(errorMsg)
checksum = errorMsg
}
if len(checksum) == 0 {
checksum = hex.EncodeToString(hash.Sum(nil))
}
}
chashes <- filename + "||" + checksum
}(filename)
} //for files
// Wait for the hashers to complete.
wg.Wait()
// Close the channel to cause main() to break
// out of for range on chashes.
close(chashes)
}
defer close(chashes)從中刪除run()。
在 Go 操場(chǎng)上運(yùn)行一個(gè)示例。
- 1 回答
- 0 關(guān)注
- 112 瀏覽
添加回答
舉報(bào)