You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go递归函数countWordsAndImages返回0值问题求助

问题解决:HTML节点统计单词和图片数量始终返回0

你的代码核心问题出在遍历子节点的循环逻辑上:

在遍历当前节点的子节点时,你写的是:

for c := n.FirstChild; c != nil; c = n.NextSibling {

这里每次迭代时,c被赋值为n.NextSibling(当前节点的兄弟节点),而不是c.NextSibling(当前子节点的下一个兄弟节点)。这会导致循环只处理第一个子节点,后续所有子节点都被跳过,递归无法覆盖整个HTML节点树,最终统计结果自然为0。

修正后的代码

import (
    "bufio"
    "strings"
    "golang.org/x/net/html"
)

func countWordsAndImages(n *html.Node) (words, images int) {
    if n.Type == html.TextNode {
        words += wordCount(n.Data)
    } else if n.Type == html.ElementNode && n.Data == "img" {
        images++
    }
    // 修正循环:遍历子节点的下一个兄弟
    for c := n.FirstChild; c != nil; c = c.NextSibling {
        tmpWords, tmpImages := countWordsAndImages(c)
        words += tmpWords
        images += tmpImages
    }
    return
}

func wordCount(s string) int {
    n := 0
    scan := bufio.NewScanner(strings.NewReader(s))
    scan.Split(bufio.ScanWords)
    for scan.Scan() {
        n++
    }
    return n
}

关键修正点

把循环条件里的c = n.NextSibling改为c = c.NextSibling,这样才能依次遍历当前节点的所有子节点,递归处理整个HTML树的每个节点,正确统计文本中的单词数和img标签数量。

内容的提问来源于stack exchange,提问作者SAUL ROJAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 15:00:42