Golang,如何从func FROM另一个函数返回?

时间:2015-06-16 04:30:00

标签: go return func

我希望在子函数apiEndpoint()中调用/退出时在父函数apiResponse()中结束执行

func apiEndpoint() {
    if false {
        apiResponse("error")
        // I want apiResponse() call to return (end execution) in parent func
        // so next apiResponse("all good") wont be executed
    }

    apiResponse("all good")
}

func apiResponse(message string) {
    // returns message to user via JSON
}

2 个答案:

答案 0 :(得分:2)

函数或方法无法控制从其调用的位置执行(控制流)。您甚至不保证它是从您的函数调用的,例如可以调用它来初始化全局变量。

据说调用者有责任以return语句显式结束执行和返回。

如果示例与您的示例一样简单,则可以使用return避免使用if-else语句:

func apiEndpoint() {
    if someCondition {
        apiResponse("error")
    } else {
        apiResponse("all good")
    }
}

此外,如果函数具有返回值并且apiResponse()将返回一个值作为调用者的返回值,则可以在一行中执行return,例如

func apiEndpoint() int {
    if someCondition {
        return apiResponse("error")
    }

    return apiResponse("all good")
}

func apiResponse(message string) int {
    return 1 // Return an int
}

注意:

只是为了完整性而不是作为你的情况下的解决方案:如果被调用函数将panic(),则调用函数中的执行将停止,并且调用序列将在调用层次结构中上升(在运行{{之后) 1}}函数,如果他们不调用defer)。恐慌恢复是针对其他事情而设计的,而不是被调用函数在调用函数中停止执行的意思。

答案 1 :(得分:0)

使用return声明:

func apiEndpoint() {
    if false {
        apiResponse("error")
        return
    }

    apiResponse("all good")
}

func apiResponse(message string) {
    // returns message to user via JSON
}