go - 无法在golang中跳出外循环
问题描述
以下是我的函数,我试图验证 ID 并且无法从内部循环返回值。
func Validate(id int, tn []Node) int {
var value int
for _, j := range tn {
if id == j.ID {
println(id, j.ID)
value = j.ID
println("aa", value)
break
} else {
if j.Children != nil {
ValidateID(id, j.Children)
}
}
}
return value
}
解决方案
看起来您想返回是否在树的任何节点中找到了 ID。您的代码几乎就在那里,但您需要检查递归调用是否找到它。使用return
而不是break
使代码更简单。
我删除了这些print
语句,我猜它们是出于调试目的。
我还用 a 替换了返回值bool
(原始代码要么返回 ID 本身,要么返回 0 表示未找到),并删除了j.Children == nil
测试(代码为空切片返回 false:
// ValidateID reports whether id exists in a tree of nodes.
func ValidateID(id int, tn []Node) bool {
for _, j := range tn {
if id == j.ID || ValidateID(id, j.Children) {
return true
}
}
return false
}
请注意,如果您想从目标节点实际返回 bool 以外的内容,我会让函数返回两个值:您感兴趣的值和表示是否找到 ID 的 bool。"Effective Go"不鼓励依赖像 0 这样的标记值。
推荐阅读
- reactjs - 使用 withRouter 进行包装会强制 PureComponent 在没有更改时更新
- javascript - 获取 Azure 上传的 blob 文件 url
- html - ACF 覆盖使用 load_value 挂钩添加的 HTML 属性
- c# - GetWindowRect 没有像我认为的那样工作
- c# - 将项目添加到数组时,索引超出了数组的范围
- sql-server - 即使我将所有内容都设置为零,我也会收到默认的执行超时
- html - 用于查找的嵌套包装器 如何查找 HTML 元素是否存在?
- javascript - 如何修复“无法读取未定义的属性'getAttribute'?
- javascript - 自动包装最后一列的数据表在折叠时格式不正确
- python - 在哪里可以找到 pandas-profiling 的配置参数?