目录

5.11

5.13

5.14

5.15

5.16

5.17

5.19


习题答案,个人理解,欢迎交流指正

5.11

package mainimport ("fmt""sort"
)var dict = map[string][]string{"algorithms":     {"data structures"},"calculus":       {"linear algebra"},"linear algebra": {"calculus"},"compilers": {"data structures","formal languages","computer organization",},"data structures":       {"discrete math"},"databases":             {"data structures"},"discrete math":         {"intro to programming"},"formal languages":      {"discrete math"},"networks":              {"operating systems"},"operating systems":     {"data structures", "computer organization"},"programming languages": {"data structures", "computer organization"},
}func main() {list, ok := toposort(dict)if !ok {fmt.Println("存在环")return}for i, s := range list {fmt.Printf("%d\t%s\n", i+1, s)}
}func toposort(dict map[string][]string) ([]string, bool) {var list []stringseen := make(map[string]bool)wait := make(map[string]bool)var visitAll func(items []string) boolvisitAll = func(items []string) bool {for _, item := range items {if !seen[item] {seen[item] = truewait[item] = trueif !visitAll(dict[item]) {return false}list = append(list, item)wait[item] = false} else if wait[item] {return false}}return true}var keys []stringfor key := range dict {keys = append(keys, key)}sort.Strings(keys)if !visitAll(keys) {return nil, false}return list, true
}

5.13

package mainimport ("fmt""io/ioutil""net/http""strings"neturl "net/url""os""golang.org/x/net/html""gopl.io/util"
)func Extract(url string, hosts map[string]bool) ([]string, error) {resp, err := http.Get(url)if err != nil {return nil, err}if resp.StatusCode != http.StatusOK {resp.Body.Close()return nil, fmt.Errorf("getting %s: %s", url, resp.Status)}content, _ := ioutil.ReadAll(resp.Body)contentstr := string(content)doc, err := html.Parse(strings.NewReader(contentstr))resp.Body.Close()if err != nil {return nil, fmt.Errorf("parsing %s as HTML: %v", url, err)}var links []stringvisitNode := func(n *html.Node) {u, err := neturl.Parse(url)if err != nil {fmt.Printf("解析路径%s失败 %s\n", url, err)}dir := u.Hostif n.Type == html.ElementNode && n.Data == "title" && hosts[dir] {name := n.FirstChild.DatamkErr := os.Mkdir(dir, os.ModePerm)if mkErr != nil && os.IsNotExist(mkErr) {fmt.Printf("创建文件夹[%s]失败 %s\n", dir, mkErr)}fn := dir + "/" + name + ".html"file, err := os.OpenFile(fn, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)if err != nil {fmt.Printf("创建文件[%s]失败 %s\n", fn, err)} else {fmt.Printf("保存文件 %s\n", fn)file.WriteString(contentstr)file.Close()}}if n.Type == html.ElementNode && n.Data == "a" {for _, a := range n.Attr {if a.Key != "href" {continue}link, err := resp.Request.URL.Parse(a.Val)if err != nil {continue}links = append(links, link.String())}}}util.ForEachNode(doc, visitNode, nil)return links, nil
}
package mainimport ("fmt""log""net/url""os""strings"
)func main() {urls := os.Args[1:]seen := map[string]bool{}toVisit := []string{}toVisit = append(toVisit, urls...)hosts := map[string]bool{}for _, u := range urls {uu, err := url.Parse(u)if err == nil {hosts[uu.Host] = true}}for len(toVisit) != 0 {links := toVisittoVisit = nilfor _, link := range links {if strings.HasSuffix(link, "/") {link = link[:len(link)-1]}if !seen[link] {fmt.Println(link)seen[link] = truel, err := Extract(link, hosts)if err != nil {log.Print(err)}toVisit = append(toVisit, l...)}}}
}

5.14

package mainimport ("fmt""io/ioutil""os"
)func Bfs(f func(item string) []string, worklist []string) {seen := make(map[string]bool)for len(worklist) > 0 {items := worklistworklist = nilfor _, item := range items {if !seen[item] {seen[item] = trueworklist = append(worklist, f(item)...)}}}
}func crawlCourse() {var dict = map[string][]string{"algorithms":     {"data structures"},"calculus":       {"linear algebra"},"linear algebra": {"calculus"},"compilers": {"data structures","formal languages","computer organization",},"data structures":       {"discrete math"},"databases":             {"data structures"},"discrete math":         {"intro to programming"},"formal languages":      {"discrete math"},"networks":              {"operating systems"},"operating systems":     {"data structures", "computer organization"},"programming languages": {"data structures", "computer organization"},}f := func(s string) []string {fmt.Println(s)return dict[s]}items := []string{}for k, _ := range dict {items = append(items, k)}Bfs(f, items)
}func crawlFile() {root := []string{"gopl.io"}f := func(path string) []string {s, _ := os.Stat(path)if !s.IsDir() {fmt.Println(path)return nil}rd, err := ioutil.ReadDir(path)if err != nil {fmt.Printf("read dir[%s] faild %s\n", path, err)return nil}files := []string{}for _, fi := range rd {files = append(files, path+"/"+fi.Name())}return files}Bfs(f, root)
}func main() {crawlCourse()crawlFile()
}

5.15

package mainimport ("fmt""math"
)func main() {fmt.Println(max())fmt.Println(max(4))fmt.Println(max(8, 4, 9))
}func max(vals ...int) int {if len(vals) == 0 {return math.MaxInt}m := math.MinIntfor _, n := range vals {if n > m {m = n}}return m
}
package mainimport ("fmt"
)func main() {fmt.Println(max(4))fmt.Println(max(8, 4, 9))
}func max(val int, vals ...int) int {for _, n := range vals {if n > val {val = n}}return val
}

5.16

package mainimport ("bytes""fmt"
)func main() {fmt.Println(join(",", []string{"wewei"}...))fmt.Println(join(",", []string{}...))fmt.Println(join("", []string{"weiwei", "zheng"}...))
}func join(sep string, strs ...string) string {var buf bytes.Buffers := ""for _, str := range strs {buf.WriteString(s)buf.WriteString(str)s = sep}return buf.String()
}

5.17

package mainimport ("fmt""net/http""os""golang.org/x/net/html"
)func main() {resp, err := http.Get("https://www.hao123.com")if err != nil {fmt.Fprintf(os.Stderr, "echo: %v\n", err)os.Exit(1)}defer resp.Body.Close()doc, err := html.Parse(resp.Body)if err != nil {fmt.Fprintf(os.Stderr, "echo: %v\n", err)os.Exit(1)}nodes1 := ElementsByTagName(doc, "div")nodes2 := ElementsByTagName(doc, "a")nodes3 := ElementsByTagName(doc, "div", "a")fmt.Printf("%d, %d, %d\n", len(nodes1), len(nodes2), len(nodes3))
}func ElementsByTagName(doc *html.Node, names ...string) []*html.Node {tags := make(map[string]bool)for _, n := range names {tags[n] = true}var list []*html.Nodevar forEachNode func(doc *html.Node)forEachNode = func(doc *html.Node) {if doc.Type == html.ElementNode && tags[doc.Data] {list = append(list, doc)}for c := doc.FirstChild; c != nil; c = c.NextSibling {forEachNode(c)}}forEachNode(doc)return list}

5.19

package mainimport ("fmt"
)func main() {fmt.Println(f())
}func f() (code int) {defer func() {if p := recover(); p != nil {code = 1}}()panic("")
}

《go语言圣经》习题答案-第5章相关推荐

  1. 《金融数据分析导论:基于R语言》习题答案(第一章)

     <金融数据分析导论:基于R语言>是芝加哥大学的教授Ruey S.Tsay所著,李洪成.尚秀芬.郝瑞丽翻译,机械工业出版社出版,是一本学习R语言和金融数据分析的很好的参考书籍. ** 注 ...

  2. c语言程序设计第四版乌云高娃,C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt...

    C语言程序设计教学课件作者第2版乌云高娃课件源程序及习题答案第4章课件.ppt 第4章循环结构的流程及应用 学习目标 ? 使用循环处理需要反复执行的操作. ? 循环结构的流程图. ? 循环与条件的综合 ...

  3. 河南理工大学c语言程序第六章答案,河南理工大学C语言课后习题答案精解第六章..ppt...

    河南理工大学C语言课后习题答案精解第六章. 选择题 (1) C语言中一维数组的定义方式为:类型说明符 数组名 A. [整型常量]B. [整型表达式] C. [整型常量]或[整型常量表达式]D. [变量 ...

  4. c语言实验答案周信东第三章,桂林电子科技大学C语言程序设计习题答案周信东实验顺序结构与逻辑运算.pdf...

    桂林电子科技大学C语言程序设计习题答案周信东实验顺序结构与逻辑运算.pdf 成 绩 良 评 语 继 续 努 力 . 批 改 时 间 2013-11-16 105155 批 改 老 师 实 验 2 顺 ...

  5. 数据结构c语言版第二版第三章课后答案,数据结构(C语言版)习题集答案第三章.doc...

    数据结构(C语言版)习题集答案第三章.doc 习题三3.1 3.10 3.13 3.5 3.6 3.15 3.17 3.19 3.24 3.29 3.31 3.51 给定操作序列P1P2P3PiPn( ...

  6. android应用程序设计张思民课后答案,Java语言程序设计习题答案(清华大学出版杜)张思民版...

    Java语言程序设计习题答案(清华大学出版杜)张思民版 更新时间:2017/2/6 12:39:00  浏览量:568  手机版 第1章 Java概述 [1]为什么说Java的运行与计算机硬件平台无关 ...

  7. 《Go语言圣经》学习笔记 第九章 基于共享变量的并发

    <Go语言圣经>学习笔记 第九章 基于共享变量的并发 目录 竞争条件 sync.Mutex互斥锁 syn.RWMutex读写锁 内存同步 syn.Once初始化 竞争条件检测 示例:并发的 ...

  8. 8086微型计算机原理答案,8086微型计算机原理与应用(吴宁)习题答案(第三章)

    8086微型计算机原理与应用(吴宁)习题答案(第三章) 8086微型计算机原理与应用(吴宁)习题答案(第二章) 第三章 3-3 (1) 源操作数 为立即寻址方式:目的操作数为寄存器寻址方式 (2) 源 ...

  9. C语言 用传统流程图表示分段函数,C语言程序设计习题答案

    C语言程序设计习题答案 习题一 C语言程序设计概述 一.名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 ...

  10. c语言程序设计第三版杜有福,C语言程序设计习题答案 杜有福

    C语言程序设计习题答案 杜有福 C语言程序设计习题答案 习题一 C语言程序设计概述 一.名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6) ...

最新文章

  1. 5 步助你成为一名优秀的 Docker 代码贡献者
  2. 一天发多少短信会封号_枸杞一天吃多少?吃多了会怎样?黑枸杞红枸杞哪个好?...
  3. 前端学习(1384):多人管理项目4资源的路径
  4. 【OS学习笔记】二十 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之主引导扇区程序
  5. sonarqube使用mysql_SonarQube的安装、配置与使用
  6. 【机器学习】ICA 原理以及相关概率论,信息论知识简介
  7. 实验五 数独游戏界面设置
  8. 福特牵手百度启动L4级自动驾驶联合测试,年底“上路”
  9. 【转载】规则化和模型选择(Regularization and model selection)
  10. Android之Retrofit详解(转载)
  11. 最新win7/win10/XP系统下载_「装机系统」_百度云
  12. mysql java 社工库_社工库源码 汇总 持续更新
  13. 2019年8月 华为鸿蒙,华为2019年开发者大会将于8月9日举行,期待鸿蒙吗?
  14. WebGL压缩纹理实践
  15. 做外链的六个有效技巧
  16. 联想电脑安装虚拟机出现不可恢复的错误
  17. 【信息安全案例】——网络信息面临的安全威胁(学习笔记)
  18. 用python绘制熊猫图案_在python中绘制熊猫系列的CDF
  19. android anr 文件路径,android出现ANR 如何导出anr文件
  20. SpringBoot系列之Spring Data MongoDB教程

热门文章

  1. 2010年券商十大金股(名单)
  2. 暗云Ⅲ: 迄今为止最复杂的木马之一
  3. Windows 11安装realtek audio control
  4. JS设计模式初探——单例模式
  5. 记一次前端启动报错npm ERR! 12@1.0.0 dev: `webpack-dev-server --inline --progress --config build/webpack.dev.c
  6. G - dfs POJ - 2386
  7. Android APP Camera2应用(02)预览流程
  8. 华为视频会议,助力企业往高品质发展
  9. springboot毕设项目高校课程知识库系统hd2m4(java+VUE+Mybatis+Maven+Mysql)
  10. 【转】铝电解电容品牌排行榜