Я новичок в программировании на Go, и меня смущает проблема с читателями bufio.Я программирую своего рода чат-клиент, который должен отображать и отправлять наши сообщения в режиме реального времени.Но сообщения, которые я получаю, не отображаются, пока я не нажму кнопку ввода в моем терминале.После нескольких тестов, похоже, что моя функция «inputListener ()» является проблемой, потому что, если я поставлю ее после чтения сообщений с сервера, сначала будут отображаться сообщения с сервера.Я предположил, что функция чтения может блокировать мой цикл, пока не получит '\ n' или что-то в этом роде.
Вот мой код:
package main
import "os"
import "strconv"
import "net"
import "bufio"
/*Recovery our input message into a buffer*/
func inputListener()([] byte){
buf := make([]byte, 512)
readerInput := bufio.NewReader(os.Stdin)
_, err := readerInput.Read(buf)
if err != nil{
panic("Error reading input.")
os.Exit(0)
}
return buf
}
func main(){
if len(os.Args) != 3{
println("Usage: ",os.Args[0], " <host> <port>\n")
os.Exit(0)
}
//Recovery the port.
port, err := strconv.Atoi(os.Args[2])
if err != nil{
panic("Error during the port recovery\n")
os.Exit(0)
}
println(port)
/*Join the adresse*/
addr := os.Args[1] + ":" + strconv.Itoa(port)
println(addr)
/* sources -- https://golang.org/pkg/net/ */
conn, err := net.Dial("tcp", addr)
if err != nil{
panic("Error connecting " + addr)
os.Exit(0)
}
buf := make([]byte, 512)
t := make([]byte, 512)
for {
/*Receive data from server*/
size, err := conn.Read(buf)
if err != nil {
panic("Error reading output.")
os.Exit(0)
}
if size >= 0{
print(string(buf[0:size]))
}
/*Data we need to send*/
t = inputListener()
if len(t) >= 0{
conn.Write(t)
}
}
conn.Close()
}
Мне нужно нажимать клавишу Enter для каждого сообщенияполучено: /
Заранее благодарю за ответы!