【发布时间】:2016-10-31 07:42:03
【问题描述】:
对于一个简单的 golang 聊天/远程登录客户端,我想将从两个 bufio 阅读器接收到的字符串传递给一个 select 语句,这样我就可以将用户输入发送到服务器,或者打印服务器发送的数据。
conn, _ := net.Dial("tcp", "localhost:8998")
for {
select{
case line, _ := bufio.NewReader(os.Stdin).ReadString('\n'):
fmt.Print("> ")
fmt.Fprintf(conn, line + "\n")
case data, _ := bufio.NewReader(conn).ReadString('\n'):
fmt.Print(data)
}
}
编译器返回这个错误
select case must be receive, send or assign recv
我怀疑我应该使用频道。但是
conn, _ := net.Dial("tcp", "localhost:8998")
outgoing := make(chan string)
incoming := make(chan string)
for {
inputReader := bufio.NewReader(os.Stdin)
connReader := bufio.NewReader(conn)
o, _ := inputReader.ReadString('\n')
i, _ := connReader.ReadString('\n')
outgoing <- o
incoming <- i
select{
case out := <-outgoing:
fmt.Print("> ")
fmt.Fprintf(conn, out + "\n")
case in := <-incoming:
fmt.Print(in)
}
}
但代码不接受或接收数据。最后,我怀疑我应该使用两个 go 例程来检查 Reader 返回值?
【问题讨论】: