我正在尝试使用接受*html的函数打印HTML文档中的所有链接。节点作为参数。我是Golang和*html的新手。节点数据类型,我以前从未使用过它们。
func visit(links []string, n *html.Node) []string {
if n == nil {
return links
}
if n.Type == html.ElementNode && n.Data == "a" {
for _, a := range n.Attr {
if a.Key == "href" {
links = append(links, a.Val)
}
}
}
if i == 0 {
i++
return visit(links, n.FirstChild)
}
return visit(links, n.NextSibling)
}
检查是否的 if 块的目的是确保只运行一次(第一次)并在后续迭代中运行。但是,从不追加,并且始终返回空切片。我不明白代码中的错误。i==0return visit(links, n.FirstChild)return visit(links, n.NextSibling)links
使用 for 循环时,代码工作正常,但当我尝试使用递归时,代码会中断。
for c := n.FirstChild; c != nil; c = c.NextSibling {
links = visit(links, c)
}
POPMUISE
相关分类