Я настроил сервер для ожидания соединения TCP и чтения ввода от пользователя:
func main() {
err := godotenv.Load()
if err != nil {
log.Fatal(err)
}
server, err := net.Listen("tcp", ":"+os.Getenv("PORT"))
if err != nil {
log.Fatal(err)
}
log.Println("HTTP Server Listening on port :", os.Getenv("PORT"))
defer server.Close()
for {
conn, err := server.Accept()
if err != nil {
log.Fatal(err)
}
go handleConn(conn)
}
}
Проблема, с которой я столкнулся, связана с моей функцией handleConn
.Я хочу начать чтение ввода в программу, потому что будет дополнительная обработка данных.Однако, когда я подключаюсь к своему серверу (nc localhost 9000
), мое соединение немедленно прерывается.
func handleConn(conn net.Conn) {
defer conn.Close()
io.WriteString(conn, "Enter a transaction:")
scanner := bufio.NewScanner(conn)
go func() {
for scanner.Scan() {
log.Println("User entered: ")
log.Println(scanner.Text())
}
}()
}
Я вижу сообщение Enter a transaction:
, но я не могу ничего ввести, потому что мое соединение немедленнопрекращено, и меня выгнали обратно в мой терминал bash.Что я здесь не так делаю?
Редактировать: я следую этому уроку - https://github.com/mycoralhealth/blockchain-tutorial/blob/master/networking/main.go.
Я попытался переместить scanner.Scan()
за пределы программы, и это работает, но пример кода здесь имеетэто внутри горутина и его пример работает.Почему это так?