当前位置: 首页 > 面试题库 >

设置流程退出代码的正确方法?

慕嘉运
2023-03-14
问题内容

在Go中,设置流程退出代码的正确方法是什么?

我尝试将主要功能更改为

func main() int {
    return -1
}

但这会导致错误 func main must have no arguments and no return values

好的,所以有os.Exit(code int),但是这会立即中止该过程并且不会干净退出(例如,不执行任何递延操作)。

我还发现panic它将退出进程并将状态代码设置为非零,这可能是最好的方法,尽管它会将堆栈跟踪信息转储到控制台。

设置退出代码的正确方法是什么?


问题答案:

使os.Exit最后一个延迟函数执行。延迟函数在周围函数返回之前立即执行,以相反的顺序执行。例如,

package main

import (
    "fmt"
    "os"
)

func main() {
    code := 0
    defer func() {
        os.Exit(code)
    }()
    defer func() {
        fmt.Println("Another deferred func")
    }()
    fmt.Println("Hello, 世界")
    code = 1
}

输出:

Hello, 世界
Another deferred func
 [process exited with non-zero status]

前往游乐场:

http://play.golang.org/p/o0LfisANwb

Go编程语言规范

推迟陈述


defer”语句调用一个函数,该函数的执行被推迟到周围的函数返回的那一刻,这是因为周围的函数执行了return语句,到达了函数体的末尾,或者是因为相应的goroutine正在惊慌。

DeferStmt =“ defer”表达式。

表达式必须是函数或方法调用;不能用括号括起来。内置函数的调用与表达式语句一样受到限制。

每次执行“
defer”语句时,都会照常评估调用的函数值和参数并重新保存,但实际的函数体不会执行。而是,在周围的函数返回之前立即执行延迟的函数,其顺序与延迟的相反。



 类似资料:
  • 问题内容: 我正在运行一个python脚本,它曾经可以运行(现在甚至可以在我的另一台笔记本电脑上运行),但是在我当前的计算机上却不行-我只收到错误代码: 我没有得到任何其他结果-甚至从文件开头的“打印”命令也没有得到。 我还没有找到特定的东西。我重新安装了python(2.7.9),pygame(1.9.1)甚至pycharm(首先尝试4.5,现在使用5.0-相同的结果) 有人知道该错误代码意味着

  • 问题内容: 任何人都可以澄清一下下面的过程是否是正确的处理流程流的方法,而没有任何流缓冲区已满和阻塞问题 我正在从Java程序中调用外部程序,正在使用ProcessBuilder来构建流程,执行之后 我正在使用一种方法来处理流程 在我的方法中,我试图处理流程流 readStream方法用于读取我的流文本。 问题答案: 不,那不是正确的方法。 首先,在某些系统上,您的代码将永远停留在调用中,因为该过

  • 上面的代码在TypeScript Play中可以找到,但我在从Visual Studio 2012编译它时收到了构建错误< code >错误“以代码1退出” 有人尝试在TypeScript中获取、设置并成功构建吗?

  • 在某些项目上运行< code>flutter run时,我收到了以下错误,但是在其他项目上运行正常: 这只是颤振演示项目,我没有做任何更改。

  • 本文向大家介绍python子线程退出及线程退出控制的代码,包括了python子线程退出及线程退出控制的代码的使用技巧和注意事项,需要的朋友参考一下 下面通过代码给大家介绍python子线程退出问题,具体内容如下所示: 跑起来是没有问题的,但是使用ctrl + c中断的时候出问题了,主线程退出了,但子线程仍然运行。 于是在主线程增加了信号处理的代码,收到sigint时改变子线程循环条件 这样ctrl

  • **更新--问题不是文件编写器没有关闭,而是错误地终止了Java应用程序。我已经更新了问题。 下面的类启动JAVAFX web视图,并将一些java对象公开给web视图的HTML。 实际上,WebEngine.executescrit(“init”)在我们的前端执行一些初始化。然后,在webview上执行的javascript上,在用户交互上,我们调用我们的FileSystemBridge的wri