症状
编译对一个你认为总会返回的函数报出 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 的情况下走到末尾。