← 中文资源

简体中文版本

Go 编译错误: missing return at end of function

修复 Go 编译器错误 missing return:带返回值的函数在某些控制流路径上会走到函数体末尾而缺少返回。

阅读英文原文

症状

编译对一个你认为总会返回的函数报出 missing return at end of function。它常在新增分支或 case 之后出现,编译器会指向函数的闭合花括号。

诊断

阅读被报告的函数,找出没有终止 return 的路径:

func classify(n int) string {
    if n > 0 {
        return "positive"
    }
    // else missing -> falls through
}

修改后用 go vet 佐证。

修复

补齐剩余路径:

func classify(n int) string {
    if n > 0 {
        return "positive"
    }
    return "non-positive"
}

switch 要加 default;可能一次都不执行的循环,应在循环之后补一个 return。

验证

此时 go build ./... 通过,且 go vet ./... 对该函数无告警,说明没有任何控制流路径会在缺少 return 的情况下走到末尾。