Как я могу получить ввод через некоторое время, не нажимая ни одной клавиши в golang

#go

#Вперед

Вопрос:

У меня запущено приложение, и через 5 секунд я хочу получить весь текст, который пользователь написал, не нажимая ни одной клавиши, например enter. В Golang

Ответ №1:

Вот функция readInput , которая использует a time.Timer для ожидания определенного времени ввода пользователя

 package main

import (
    "bufio"
    "fmt"
    "log"
    "os"
    "time"

    "golang.org/x/crypto/ssh/terminal"
)

func readInput() string{

    state, err := terminal.MakeRaw(0)
    if err != nil {
        log.Fatalln("setting stdin to raw:", err)
    }
    defer func() {
        if err := terminal.Restore(0, state); err != nil {
            log.Println("warning, failed to restore terminal:", err)
        }
    }()

    timer := time.NewTimer(2 * time.Second)
    in := bufio.NewReader(os.Stdin)
    input := []rune{}
    go func() {
        for {
            
            r, _, err := in.ReadRune()
            if err != nil {
                log.Println("stdin:", err)
                break
            }
            input = append(input, r)
        }
    }()
    <- timer.C
    return string(input);
}

func main() {
    s:= readInput()
    fmt.Println(s)
}
  

Комментарии:

1. Потому что в ответе есть таймер на 2 секунды. Вам нужно настроить его так, как вам подходит