From f9c06f7b5a723491250caae4c0a236c3fcd05dad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8B=AC=E5=AD=A4=E4=BC=B6=E4=BF=9C?= <1184662350@qq.com> Date: Sun, 4 Dec 2022 14:20:15 +0800 Subject: [PATCH] =?UTF-8?q?day7=E5=87=BD=E6=95=B0=20=E9=80=92=E5=BD=92=20?= =?UTF-8?q?=E9=80=92=E5=BD=92=E7=BB=83=E4=B9=A0=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- go.mod | 2 + go.sum | 2 + src/study/day3/server1.go | 2 +- src/study/day7Function/Practice5.1_5.4.go | 87 +++++++++++++++++++++++ src/study/day7Function/Recursive.go | 59 +++++++++++++++ 5 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 go.sum create mode 100644 src/study/day7Function/Practice5.1_5.4.go create mode 100644 src/study/day7Function/Recursive.go diff --git a/go.mod b/go.mod index 6666431..753b086 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module Study go 1.19 + +require golang.org/x/net v0.2.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..2195436 --- /dev/null +++ b/go.sum @@ -0,0 +1,2 @@ +golang.org/x/net v0.2.0 h1:sZfSu1wtKLGlWI4ZZayP0ck9Y73K1ynO6gqzTdBVdPU= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= diff --git a/src/study/day3/server1.go b/src/study/day3/server1.go index 9b6bbf9..eb71413 100644 --- a/src/study/day3/server1.go +++ b/src/study/day3/server1.go @@ -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) { diff --git a/src/study/day7Function/Practice5.1_5.4.go b/src/study/day7Function/Practice5.1_5.4.go new file mode 100644 index 0000000..8c44fcd --- /dev/null +++ b/src/study/day7Function/Practice5.1_5.4.go @@ -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 +} diff --git a/src/study/day7Function/Recursive.go b/src/study/day7Function/Recursive.go new file mode 100644 index 0000000..2072ecb --- /dev/null +++ b/src/study/day7Function/Recursive.go @@ -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 +}