[日常] Go语言圣经-函数多返回值习题
Go语言圣经-函数多返回值
1.在Go中,一个函数可以返回多个值
2.许多标准库中的函数返回2个值,一个是期望得到的返回值,另一个是函数出错时的错误信息
3.如果一个函数将所有的返回值都显示的变量名,那么该函数的return语句可以省略操作数。这称之为bare return。
练习 5.5: 实现countWordsAndImages。(参考练习4.9如何分词)
- package main
- import (
- "fmt"
- "golang.org/x/net/html"
- "net/http"
- "os"
- "strings"
- )
- /*
- 练习 5.5: 实现countWordsAndImages。(参考练习4.9如何分词)
- */
- func main() {
- words, images, _ := CountWordsAndImages(os.Args[1])
- fmt.Printf("文字:%d,图片:%d \n",words,images)
- }
- // CountWordsAndImages does an HTTP GET request for the HTML
- // document url and returns the number of words and images in it.
- func CountWordsAndImages(url string) (words, images int, err error) {
- resp, err := http.Get(url)
- if err != nil {
- return
- }
- doc, err := html.Parse(resp.Body)
- resp.Body.Close()
- if err != nil {
- err = fmt.Errorf("parsing HTML: %s", err)
- return
- }
- words, images = countWordsAndImages(doc)
- //bare return
- return
- }
- func countWordsAndImages(n *html.Node) (words, images int) {
- texts, images := visit3(nil,0, n)
- for _, v := range texts {
- v = strings.Trim(strings.TrimSpace(v), "\r\n")
- if v == "" {
- continue
- }
- words += strings.Count(v, "")
- }
- //bare return
- return
- }
- //递归循环html
- func visit3(texts []string, imgs int, n *html.Node) ([]string, int) {
- //文本
- if n.Type == html.TextNode {
- texts = append(texts, n.Data)
- }
- //图片
- if n.Type == html.ElementNode && (n.Data == "img") {
- imgs++
- }
- for c := n.FirstChild; c != nil; c = c.NextSibling {
- if c.Data == "script" || c.Data == "style" {
- continue
- }
- texts,imgs = visit3(texts, imgs, c)
- }
- //多返回值
- return texts, imgs
- }
练习 5.6: 修改gopl.io/ch3/surface (§3.2) 中的corner函数,将返回值命名,并使用bare return。
这个很简单就不贴了
[日常] Go语言圣经-函数多返回值习题的更多相关文章
- C语言中函数的返回值
规则 除局部变量的内存地址不能作为函数的返回值外,其他类型的局部变量都能作为函数的返回值. 我总结出下面这些规则: int.char等数据类型的局部变量可以作为函数返回值. 在函数中声明的指针可以作为 ...
- [日常] Go语言圣经-Panic异常,Recover捕获异常习题
Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...
- [日常] Go语言圣经--复合数据类型,数组习题
go语言圣经-复合数据类型 1.以不同的方式组合基本类型可以构造出来的复合数据类型 2.四种类型——数组.slice.map和结构体 3.数组是由同构的元素组成——每个数组元素都是完全相同的类型——结 ...
- [日常] Go语言圣经-文本和HTML模板习题
Go语言圣经-文本和HTML模板 练习 4.14: 创建一个web服务器,查询一次GitHub,然后生成BUG报告.里程碑和对应的用户信息. 1.查看下文档godoc net/http |grep H ...
- [日常] Go语言圣经-函数递归习题
练习 5.1: 修改findlinks代码中遍历n.FirstChild链表的部分,将循环调用visit,改成递归调用. 练习 5.2: 编写函数,记录在HTML树中出现的同名元素的次数. 练习 5. ...
- [日常] Go语言圣经-基于select的多路复用习题
练习 8.8: 使用select来改造8.3节中的echo服务器,为其增加超时,这样服务器可以在客户端10秒中没有任何喊话时自动断开连接. reverb3.go package main import ...
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
- Shell入门教程:Shell函数的返回值
shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...
- c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别
一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...
随机推荐
- Python3.5 学习二十二
回顾: 发送请求时:发送请求头和请求数据 request.META和request.request.body 响应请求时:响应头和响应返回数据 response.HEADER和response.bod ...
- 【文文殿下】[CEOI2004]锯木厂选址 题解
题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...
- IDFA
https://zhuanlan.zhihu.com/p/24161646 IDFA全称是identifier for advertisers,在了解IDFA之前,我们需要了解另一个概念,叫UDID. ...
- graphite custom functions
尊重作者的劳动,转载请注明作者及原文地址 http://www.cnblogs.com/txwsqk/p/6522854.html 参考 https://graphite.readthedocs.io ...
- 设计模式《JAVA与模式》之迭代子模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述迭代子(Iterator)模式的: 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不 ...
- Asp.net管线事件(页面请求周期)
在处理该请求时将由 HttpApplication 类执行以下事件. 希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件. . 对请求进行验证,将检查浏览器发送的信息,并确定其 ...
- iPhone X Web 设计
原文地址:https://webkit.org/blog/7929/designing-websites-for-iphone-x/ 开箱即用(开发者无需进行任何设置),在iPhone X中,Safa ...
- Python:快速查找出被挂马的文件
网站被入侵,担心被挂马,因此就想自己写个脚本来查找那些被挂马的文件 思路 需要实现准备一份未受感染的源代码和一份可能受感染的源代码,然后运行以下脚本,就能找出到底哪些文件被挂马了. 其中,主要是根据比 ...
- Silverlight中使用MVVM(3)—进阶
这篇主要引申出Command结合MVVM模式在应用程序中的使用 我们要做出的效果是这样的 就是提供了一个简单的查询功能将结果绑定到DataGrid中,在前面的基础上,这个部分相对比较容易实现了 我们在 ...
- Vue笔记:封装 axios 为插件使用
前言 自从Vue2.0推荐大家使用 axios 开始,axios 被越来越多的人所了解.使用axios发起一个请求对大家来说是比较简单的事情,但是axios没有进行封装复用,项目越来越大,引起的代码冗 ...