登录
首页 >  Golang >  Go问答

golang html.Node.Data容器中不包含可读字符

来源:stackoverflow

时间:2024-03-08 11:48:17 474浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《golang html.Node.Data容器中不包含可读字符》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

我从go编程语言书中复制了下面的代码,但我的输出与书中的不一样 代码如下:

import (
    "fmt"
    "os"
    "golang.org/x/net/html"
)


func main() {
    doc , err := html.Parse(os.Stdin)
    if err != nil {
        fmt.Fprintf(os.Stderr, "findlinks1: %v\n", err)
        os.Exit(1)
    }

    for _ , link := range visit([]string{} ,doc)  {
        fmt.Println(link);
    }

    

}

func visit(links []string , n *html.Node) []string {
    

        if n.Type == html.ElementNode && n.Data == "a"{
            for _,a := range n.Attr {
                if a.Key == "href" {
                    links = append(links , a.Val)
                }
            }
        }

        for c := n.FirstChild ; c != nil ; c = c.NextSibling {
                visit(links,c)
        }
    return links 
}

从 stdin 获得的数据实际上是另一个 prog 的输出,该 prog 带来网页的 html,下图显示了其输出: 我在访问开始时添加了一个 printf 来查看发生了什么,但我发现 n.data 不包含标签名称,而是包含一个不可读字符的分支 有什么帮助吗???


正确答案


这个程序不起作用,因为在函数访问期间复制了 links 变量,这个新副本确实指向相同的底层数组,但分配给它的任何更改都不会影响原始的行,因此在行

visit(links,c) must be links = visit(links,c)

今天关于《golang html.Node.Data容器中不包含可读字符》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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