gpt4 book ai didi

go - 在 golang 终端应用程序中以编程方式结束输入

转载 作者:IT王子 更新时间:2023-10-29 02:05:15 27 4
gpt4 key购买 nike

我试图在 3 秒内以编程方式结束终端输入并输出结果。

我的代码如下:

package main

import (
"bufio"
"fmt"
"os"
"time"
)

var (
result string
err error
)

func main() {
fmt.Println("Please input something, you have 3000 milliseconds")
go func() {
time.Sleep(time.Millisecond * 3000)
fmt.Println("It's time to break input and read what you have already typed")
fmt.Println("result")
fmt.Println(result)
}()
in := bufio.NewReader(os.Stdin)
result, err = in.ReadString('\n')
if err != nil {
fmt.Println(err)
}
}

输出:

Please input something, you have 3000 milliseconds
hello It's time to break input and read what you have already typed
result

我刚刚打印了 hello 并且 3 秒过去了,程序应该结束输入并读取我的 hello 并给出输出:

result
hello

但我不知道如何提供这个。是否可以在用户无意的情况下结束终端输入并读取输入值?

最佳答案

你不能直接对stdin的读取超时,所以你需要在接收读取goroutine的结果时创建一个超时:

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() {
input := make(chan string, 1)
go getInput(input)

select {
case i := <-input:
fmt.Println(i)
case <-time.After(3000 * time.Millisecond):
fmt.Println("timed out")
}
}

关于go - 在 golang 终端应用程序中以编程方式结束输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31006442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com