day7函数 递归 递归练习题
parent
5df6dc2c5a
commit
f9c06f7b5a
|
@ -0,0 +1,2 @@
|
|||
golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU=
|
||||
golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
|
|
@ -8,7 +8,7 @@ import (
|
|||
|
||||
func main() {
|
||||
http.HandleFunc("/", handler1)
|
||||
log.Fatal(http.ListenAndServe("localhost:8090", nil))
|
||||
log.Fatal(http.ListenAndServe("localhost:8989", nil))
|
||||
}
|
||||
|
||||
func handler1(w http.ResponseWriter, r *http.Request) {
|
||||
|
|
|
@ -0,0 +1,87 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"golang.org/x/net/html"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type man struct {
|
||||
sex bool
|
||||
name string
|
||||
action func()
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
var dug man
|
||||
dug.name = "dugulingping"
|
||||
dug.action = func() {
|
||||
fmt.Println("Hi " + dug.name)
|
||||
}
|
||||
fmt.Printf("%T\n", dug.action)
|
||||
dug.action()
|
||||
|
||||
resp, err := http.Get("https://golang-china.github.io/gopl-zh/ch5/ch5-02.html")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
err := resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
}
|
||||
doc, err := html.Parse(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
// 关闭链接
|
||||
err = resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
node := make(map[string]int)
|
||||
v(node, doc)
|
||||
//fmt.Println(node)
|
||||
|
||||
}
|
||||
|
||||
func v(node map[string]int, n *html.Node) map[string]int {
|
||||
if n == nil {
|
||||
return node
|
||||
}
|
||||
if n.Type == html.ElementNode {
|
||||
node[n.Data] += 1
|
||||
//fmt.Println(n.Data)
|
||||
}
|
||||
|
||||
if n.Type == html.TextNode {
|
||||
if n.Data != "script" && n.Data != "style" {
|
||||
//fmt.Println(n.Data)
|
||||
}
|
||||
}
|
||||
node = v(node, n.FirstChild)
|
||||
node = v(node, n.NextSibling)
|
||||
return node
|
||||
}
|
||||
func v4(links []string, n *html.Node) []string {
|
||||
if n == nil {
|
||||
return links
|
||||
}
|
||||
if n.Type == html.ElementNode && (n.Data == "a" || n.Data == "images" || n.Data == "scripts") {
|
||||
for _, a := range n.Attr {
|
||||
if a.Key == "href" {
|
||||
links = append(links, a.Val)
|
||||
//fmt.Println(a.Val)
|
||||
}
|
||||
}
|
||||
}
|
||||
links = v4(links, n.FirstChild)
|
||||
links = v4(links, n.NextSibling)
|
||||
return links
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
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, "findlinks1: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
//fmt.Println(doc.NextSibling.Data)
|
||||
for _, link := range visit(nil, doc.FirstChild) {
|
||||
fmt.Println(link)
|
||||
}
|
||||
//outline(nil, doc)
|
||||
}
|
||||
|
||||
// visit appends to links each link found in n and returns the result.
|
||||
func visit(links []string, n *html.Node) []string {
|
||||
if n == nil {
|
||||
return links
|
||||
}
|
||||
if n.Type == html.ElementNode && n.Data == "a" {
|
||||
for _, a := range n.Attr {
|
||||
if a.Key == "href" {
|
||||
links = append(links, a.Val)
|
||||
//fmt.Println(a.Val)
|
||||
}
|
||||
}
|
||||
}
|
||||
//for c := n.FirstChild; c != nil; c = c.NextSibling {
|
||||
// links = visit(links, c)
|
||||
//}
|
||||
//if n != nil {
|
||||
// links = visit(links, n.NextSibling)
|
||||
//}
|
||||
links = visit(links, n.FirstChild)
|
||||
links = visit(links, n.NextSibling)
|
||||
return links
|
||||
}
|
||||
func outline(stack []string, n *html.Node) []string {
|
||||
if n.Type == html.ElementNode {
|
||||
stack = append(stack, n.Data)
|
||||
fmt.Println(stack)
|
||||
}
|
||||
for c := n.FirstChild; c != nil; c = c.NextSibling {
|
||||
outline(stack, c)
|
||||
}
|
||||
return stack
|
||||
}
|
Loading…
Reference in New Issue