问题描述
两个goroutine,一个goroutine中做键盘的输入,另一个goroutine做其它数据处理。 运行后,如果我不输入数据,另一个goroutine也停止运行了。也没调度。我希望即使我不输入数据,也不要影响另一个goroutine。
问题出现的环境背景及自己尝试过哪些方法
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
package main
import (
"fmt"
"os"
"bufio"
"math/rand"
)
func main() {
msgChan := make(chan string)
roundChan := make(chan int)
sleepChan := make(chan bool)
go input(msgChan)
go roundNum(roundChan)
go Scheduler(msgChan,roundChan)
<-sleepChan
}
func Scheduler(msgChan chan string,roundChan chan int) {
var(
msg string
round int
)
for{
select {
case msg = <-msgChan:
fmt.Println("msg:",msg)
case round = <- roundChan:
fmt.Println(round)
}
}
}
func roundNum(roundChan chan int) {
roundChan <- rand.Int()
}
func input(msgChan chan string) {
var(
msg string
err error
)
for{
fmt.Println("请输入要回复的消息:")
if msg,err = bufio.NewReader(os.Stdin).ReadString('\n');err!=nil{
return
}
msgChan<-msg
}
}
你期待的结果是什么?实际看到的错误信息又是什么?
期待: 可以随时输入键盘数据,如果我输入键盘数据两个goroutine都正常运行。如果我不输入键盘数据,也不要影响另一个goroutine的执行。
我把你的排版和标签都修改了,以后提问问题需要注意
根据你的描述,我猜测你想问的是
fmt.Println(round)
这个为啥一直不执行是吧。肯定会打印一次,因为你的
roundNum
函数执行一次,发送了一个消息;然后它之后就退出了,所以以后你再也见不到它了;所以也没所以了