0
我想做一個終端golang
應用程序,其中用戶有4秒鐘輸入的東西。如果他輸入的東西更快,打印結果並要求他再輸入4秒鐘。在終端去應用程序的輸入超時
如果用戶在4秒內不會返回輸入,程序必須寫入time out
並再次詢問他的輸入。
我的代碼這樣做,但只有一次。在第一個timeout
之後,即使用戶比4秒快,也不會返回任何結果。我無法弄清楚爲什麼這樣。
代碼
package main
import (
"bufio"
"fmt"
"log"
"os"
"time"
)
var (
result string
err error
)
func getInput(input chan string) {
in := bufio.NewReader(os.Stdin)
result, err := in.ReadString('\n')
if err != nil {
log.Fatal(err)
}
input <- result
}
func main() {
for {
fmt.Println("input something")
input := make(chan string, 1)
go getInput(input)
select {
case i := <-input:
fmt.Println("result")
fmt.Println(i)
case <-time.After(4000 * time.Millisecond):
fmt.Println("timed out")
}
}
}
輸出:
input something
123
result
123
input something
2
result
2
input something
timed out
input something
2
timed out
input something
timed out
input something