如何检查条件,如果条件为真,则停止报价器并退出应用程序,如果条件不成立并且发生超时,则退出应用程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查条件,如果条件为真,则停止报价器并退出应用程序,如果条件不成立并且发生超时,则退出应用程序相关的知识,希望对你有一定的参考价值。

在我的以下代码k == 3上,我将true发送给channel,但它不检查case x,ok以打印“ test pass”和os.Exit( 20)(我希望应用程序在第一个真实条件下退出并忽略time.Sleep(timeout)

另一方面,当我更改k:= 4时,我希望应用程序在10sec之后退出,并使用os.Exit(10)打印“ 发生超时

func main() 
    timeout := time.Second * 10
    sleepTime := 5 * time.Second
    done := make(chan bool)
    ticker := time.NewTicker(sleepTime)

    go func() 
        for 
            select 
            case x,ok := <-done:
                if ok 
                    if x 
                        //Test passed
                        log.Println("** Test Passed **")
                        os.Exit(20)
                    else 
                        //Timeout
                        log.Println("Timeout occurred")
                        os.Exit(10)
                    
                
                return
            case <-ticker.C:
                // Validate
                log.Println("ticker")
                //Check for condition and if its true send true to channel
                k := 3
                if k == 3 
                    done <- true
                

            
        
    ()

    time.Sleep(timeout)
    done <- false

答案

k==3的第一种情况将不起作用,因为您写入了done通道,但是没有人在听它,因此它挂在那里。如果要退出k==3情况,则不要写通道,而要在那儿存在的代码。

第二部分,当k==4可能正在工作时,因为当main超时时,它将写入done,这将由select中的第一种情况接收。但是可能程序在有机会执行之前就结束了。写入done通道后,可以在main上使睡眠。

以上是关于如何检查条件,如果条件为真,则停止报价器并退出应用程序,如果条件不成立并且发生超时,则退出应用程序的主要内容,如果未能解决你的问题,请参考以下文章

三元运算符,如果为真则返回检查条件的快捷方式?

如果不满足条件,则停止前进到下一页

基本布尔逻辑——如何仅在另一个条件为真时测试条件

MySQL存储过程——一一检查是不是满足某些条件;如果不满足,则退出程序并返回特定消息

如果 if 语句的条件为真,可以停止执行吗?

如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查