我有一个文本文件,里面只有一行文字 . 我想将所有这些单词分别存储在一个通道中,然后从通道中提取所有这些单词并逐个打印 . 我有以下代码:
func main() {
f, _ := os.Open("D:\\input1.txt")
scanner := bufio.NewScanner(f)
file1chan := make(chan string)
for scanner.Scan() {
line := scanner.Text()
// Split the line on a space
parts := strings.Fields(line)
for i := range parts {
file1chan <- parts[i]
}
}
print(file1chan)
}
func print(in <-chan string) {
for str := range in {
fmt.Printf("%s\n", str)
}
}
但是当我运行它时,我收到以下错误:
致命错误:所有goroutines都睡着了 - 僵局! goroutine 1 [chan send]:main.main()
我尝试在网上查找,但我仍然无法修复它 . 有人可以告诉我为什么会这样,以及如何解决这个问题?
谢谢!
1 回答
您的
file1chan
是无缓冲的,因此当您尝试向该通道发送值时,它会永久阻塞,等待某人获取值 .您需要启动一个新的goroutine,或者将通道缓冲并将其用作数组 . 这是与另一个goroutine的版本:
这里是缓冲版本,只处理一个字符串: