Skip to Main Content
Go程序设计语言
book

Go程序设计语言

by 艾伦A. A.多诺万, 布莱恩W. 柯尼汉
August 2021
Beginner to intermediate content levelBeginner to intermediate
450 pages
6h 1m
Chinese
Pearson
Content preview from Go程序设计语言

5.8 延迟函数调用

findLinks示例使用http.Get的输出作为html.Parse的输入。如果请求的URL是HTML那么它一定会正常工作,但是许多页面包含图片、文字和其他文件格式。如果让HTML解析器去解析这类文件可能会发生意料外的状况。

下面的程序获取一个HTML文档然后输出它的标题。title函数检测从服务器端回的Content-Type头部,如果文档不是HTML则返回错误。

下面是稍稍编辑后的命令行会话示例:

观察重复的resp.Body.Close()调用,它保证title函数在任何执行路径下都会关闭网络连接,包括发生错误的情况。随着函数变得越来越复杂,并且需要处理更多的错误情况,这样一种重复的清理动作会造成之后的维护问题。我们看看Go语言的defer机制怎样让这些工作变得更简单。

语法上,一个defer语句就是一个普通的函数或方法调用,在调用之前加上关键字defer。函数和参数表达式会在语句执行时求值,但是无论是正常情况下,执行return语句或函数执行完毕,还是不正常的情况下,比如发生宕机,实际的调用推迟到包含defer语句的函数结束后才执行。defer语句没有限制使用次数;执行的时候以调用defer语句顺序的倒序进行。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
Go语言编程

Go语言编程

威廉·肯尼迪

Publisher Resources

ISBN: 9787111558422