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

Go 设置流程退出代码的正确方法?,go,Go,在Go中,设置流程退出代码的正确方法是什么 我试着把主函数改为 func main() int { return -1 } 但这会导致错误func main必须没有参数和返回值 好的,因此存在os.Exit(code int),但是这会立即中止进程,并且不会干净地退出(例如,不会运行延迟) 我还发现panic将退出进程并将状态代码设置为非零,这可能是最好的方法,尽管它会将堆栈跟踪转储到控制台 设置退出代码的正确方法是什么?使操作系统退出上次执行的延迟功能。延迟函数在周围函数返回之前立即

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

我试着把主函数改为

func main() int {
    return -1
}
但这会导致错误
func main必须没有参数和返回值

好的,因此存在
os.Exit(code int)
,但是这会立即中止进程,并且不会干净地退出(例如,不会运行延迟)

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


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

使操作系统退出上次执行的延迟功能。延迟函数在周围函数返回之前立即执行,顺序与延迟的顺序相反。比如说,

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]
前往游乐场:

“defer”语句调用其执行被延迟到的函数 由于 函数执行了一个return语句,到达 它的函数体,或者因为相应的goroutine是 惊慌失措

DeferStmt=“defer”表达式

表达式必须是函数或方法调用;不可能 括号内。对于,对内置函数的调用受到限制 表达式语句

每次执行“defer”语句时,函数值和 调用的参数按常规计算并重新保存,但 未执行实际函数体。相反,延迟函数是 在周围函数返回之前立即执行,在 相反,他们被推迟了


我也在想同样的事情。也许此线程可以帮助:。但是这对我没有多大帮助。非常好!我甚至都不认为这是可能的。