- 函式宣告
- 遞迴
- 多返回值
- 錯誤
- 函式變數
- 匿名函式
- 變長函式
- 延遲函式呼叫
- 宕機
- 恢復
練習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文件樹種所有文字節點的內容.但不包括 或
頭條楓林網