登录
首页 >  Golang >  Go问答

无法逃离golang的外层循环

来源:stackoverflow

时间:2024-02-29 18:18:24 365浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《无法逃离golang的外层循环》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新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 语句,我猜这些语句是为了调试目的。

我还用 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 这样的标记值。

今天关于《无法逃离golang的外层循环》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>