2017-01-27 2 views
-1

У меня проблема. Мне нужно написать функцию для заполнения сопоставления из имен элементов - p, div, span и т. Д. - к числу элементов с этим именем в дереве документов HTML. Я сделал функцию outline2, она не работает, вот журнал eroor:Карта html-тегов concetrs в Golang не работает должным образом

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

Ошибка точно. Вы не можете назначить в ноль карте. Вы должны сначала выделить. Также вам нужно что-то работать, вы не Func возвращают ничего. Так

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

должен работать

+0

О, лорд = (. Такая глупая ошибка. Большое спасибо. Это помогло. –

Смежные вопросы