Golang中的counetrs html标签地图不能正常工作

时间:2017-01-27 17:15:51

标签: html dictionary go

我遇到了问题。 我需要编写一个函数来填充从元素名称-p,div,span等的映射到HTML文档树中具有该名称的元素的数量。我创建了函数outline2,它不起作用,这里是eroor日志:

html
panic: assignment to entry in nil map

    goroutine 1 [running]:
    panic(0x4c3b40, 0xc042010a90)
            F:/Go/src/runtime/panic.go:500 +0x1af
    main.outline2(0x0, 0xc0420320e0)
            F:/Go_Stuff/Books/Golang_stuff/exercises/src/gopl.io/ch5/outline/main.go:29 +0x1ae
    main.outline2(0x0, 0xc042032070)
            F:/Go_Stuff/Books/Golang_stuff/exercises/src/gopl.io/ch5/outline/main.go:34 +0xe3
    main.main()
            F:/Go_Stuff/Books/Golang_stuff/exercises/src/gopl.io/ch5/outline/main.go:23 +0x77

以下是代码:

func main() {
    doc, err := html.Parse(os.Stdin)
    if err != nil {
        fmt.Fprintf(os.Stderr, "outline: %v\n", err)
        os.Exit(1)
    }
    outline2(nil, doc)
}
func outline2(tags map[string]int, n *html.Node) {
    fmt.Println(n.Data)
    if n.Type == html.ElementNode {
        fmt.Println(n.Data)
        tags[n.Data] += 1 // push tag
        fmt.Println(n.Data)

    }
    for c := n.FirstChild; c != nil; c = c.NextSibling {
        outline2(tags, c)


    }
}

请指出我的错误。我不知道该怎么做=(

1 个答案:

答案 0 :(得分:1)

错误确切。你不能在零地图中分配。你必须先分配。你还需要一些工作,你不需要任何回报。所以

outline := make(map[string]int) //allocate and name your map
outline2(outline, doc)
fmt.Println(outline) //do something with it

应该有效