我有一个频道:
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)
有没有更优雅的方式来写这个?
我正在尝试在docker中运行一个程序,一旦程序成功启动,它就会在docker的文件系统中创建一个FIFO文件,并在其中写入一个“成功”字符串。我知道如果文件存在,我可以通过 流式传输文件的内容tail -f,但这将始终等到我点击ctrl-ccli。另外,如果文件尚未创建,如何扩展这种情况?
我想知道是否有一个 shell 命令可以等待直到文件被写入非空字符串,并且在我开始 wait 时该文件可能不存在。一旦达到超时,等待就会退出。
请注意,此命令将传递给带有docker exec -i myContainer the_desired_command....