2019年4月24日水曜日

開発環境

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第5章(関数)、5.2(再帰)、練習問題5.2の解答を求めてみる。

コード

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, "findlinks: %v\n", err)
  os.Exit(1)
 }
 for data, n := range visit(make(map[string]int), doc) {
  fmt.Printf("%v: %v\n", data, n)
 }
}

func visit(count map[string]int, n *html.Node) map[string]int {
 if n == nil {
  return count
 }
 if n.Type == html.ElementNode {
  count[n.Data]++
 }
 count = visit(count, n.FirstChild)
 count = visit(count, n.NextSibling)
 return count
}

入出力結果(cmd(コマンドプロンプト)、Terminal)

$ ./fetch https://golang.org | go run sample2.go
svg: 1
path: 2
pre: 1
select: 1
option: 8
title: 2
input: 1
button: 1
span: 5
br: 3
head: 1
script: 8
a: 22
body: 1
div: 34
form: 1
textarea: 2
iframe: 1
html: 1
meta: 3
link: 2
$ ./fetch https://www.mkamimura.com | go run sample2.go
meta: 21
noscript: 1
img: 66
ul: 23
head: 1
header: 1
aside: 2
textarea: 1
script: 31
p: 54
h2: 10
li: 305
div: 434
select: 1
gcse:searchbox-only: 2
title: 1
ins: 5
br: 47
input: 3
link: 10
style: 2
h3: 18
ol: 3
strong: 1
footer: 1
html: 1
h1: 1
span: 149
a: 660
abbr: 18
option: 122
form: 1
body: 1
$ ./fetch https://www.jp-kamimura.com | go run sample2.go
script: 7
title: 1
link: 3
header: 1
li: 20
span: 1
meta: 1
div: 1
footer: 1
nav: 1
html: 1
body: 1
gcse:searchbox-only: 1
style: 1
h2: 1
a: 21
head: 1
ul: 1
$ ./fetch https://www.example.com | go run sample2.go
p: 2
a: 1
head: 1
meta: 3
style: 1
body: 1
html: 1
title: 1
div: 1
h1: 1
$ 

0 コメント:

コメントを投稿