小编Ugt*_*gty的帖子

如何仅在满足某些条件时才执行“select”语句中的“case”

我有一个频道:

aChan := make(chan struct{})
Run Code Online (Sandbox Code Playgroud)

和超时时间var t time.Duration。我希望程序在通道关闭时退出,或者在 t 是正持续时间时t达到超时 。

我知道我可以使用外部 if else 循环,但这看起来非常多余:

    if t >= time.Duration(0) {
        select {
        case <-time.After(t):
            fmt.Fprintln(os.Stdout, "timeout!"))
            close(timeoutChan)
        case <-aChan:
            fmt.Fprintln(os.Stdout, "aChan is closed"))
            return
        }
    } else {
        select {
        case <-aChan:
            fmt.Fprintln(os.Stdout, "aChan is closed"))
            return
        }
    }

Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来写这个?

concurrency go

2
推荐指数
1
解决办法
57
查看次数

如何在 shell 中等待文件创建并监听其内容直到超时

我正在尝试在docker中运行一个程序,一旦程序成功启动,它就会在docker的文件系统中创建一个FIFO文件,并在其中写入一个“成功”字符串。我知道如果文件存在,我可以通过 流式传输文件的内容tail -f,但这将始终等到我点击ctrl-ccli。另外,如果文件尚未创建,如何扩展这种情况?

我想知道是否有一个 shell 命令可以等待直到文件被写入非空字符串,并且在我开始 wait 时该文件可能不存在。一旦达到超时,等待就会退出。

请注意,此命令将传递给带有docker exec -i myContainer the_desired_command....

bash shell docker

2
推荐指数
1
解决办法
1471
查看次数

标签 统计

bash ×1

concurrency ×1

docker ×1

go ×1

shell ×1