- 函式宣告
- 遞迴
- 多返回值
- 錯誤
- 函式變數
- 匿名函式
- 變長函式
- 延遲函式呼叫
- 宕機
- 恢復
練習5.1
改變findlinks程式,使用遞迴呼叫visit(而不是迴圈)遍歷n.FirstChild連結串列
- 可怕的遞迴ヽ(*。>Д<)o゜可怕
- 迴圈還挺好理解的,可是改成遞迴真。。。不好理解
- 本題就修改一句就好了
return visit(visit(links, n.FirstChild), n.NextSibling)
練習5.2
寫一個函式,用於統計HTML文件樹內所有的元素個數,如p,div,span等
- 將傳入的slice修改爲map,其他不變
package main import ( "fmt" "os" "golang.org/x/net/html" ) func main() { doc, err := html.Parse(os.Stdin) if err != nil { fmt.Fprintf(os.Stderr, "findelems: %vn", err) os.Exit(1) } elements := map[string]int{} visit(elements, doc) for elem, count := range elements { fmt.Printf("%st%dn", elem, count) } } func visit(emap[string]int, n *html.Node) { if n.Type == html.ElementNode { e[n.Data]++ } for c := n.FirstChild; c != nil; c = c.NextSibling { visit(e, c) } }
練習5.3
寫一個函式,用於輸出HTML文件樹種所有文字節點的內容.但不包括 或