无法在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

}


慕哥6287543
浏览 146回答 1
1回答

MMTTMM

看起来您想返回是否在树的任何节点中找到了 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 这样的标记值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go