修正半角标点符号

This commit is contained in:
kimw
2018-05-27 16:51:15 -04:00
parent fb3359fb4e
commit 0ab7557665
39 changed files with 85 additions and 86 deletions

View File

@@ -8,8 +8,7 @@ func name(parameter-list) (result-list) {
}
```
形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。
在hypot函数中,
形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值列表描述了函数返回值的变量名以及类型。如果函数返回一个无名变量或者没有返回值,返回值列表的括号是可以省略的。如果一个函数声明不包括返回值列表,那么函数体执行完毕后,不会返回任何值。在hypot函数中
```Go
func hypot(x, y float64) float64 {
@@ -18,7 +17,7 @@ func hypot(x, y float64) float64 {
fmt.Println(hypot(3,4)) // "5"
```
x和y是形参名,3和4是调用时的传入的实参函数返回了一个float64类型的值。
x和y是形参名3和4是调用时的传入的实参函数返回了一个float64类型的值。
返回值也可以像形式参数一样被命名。在这种情况下,每个返回值被声明成一个局部变量,并根据该返回值的类型,将其初始化为该类型的零值。
如果一个函数在声明时,包含返回值列表,该函数必须以 return语句结尾除非函数明显无法运行到结尾处。例如函数在结尾时调用了panic异常或函数中存在无限循环。

View File

@@ -4,7 +4,7 @@
下文的示例代码使用了非标准包 golang.org/x/net/html 解析HTML。golang.org/x/... 目录下存储了一些由Go团队设计、维护对网络编程、国际化文件处理、移动平台、图像处理、加密解密、开发者工具提供支持的扩展包。未将这些扩展包加入到标准库原因有二一是部分包仍在开发中二是对大多数Go语言的开发者而言扩展包提供的功能很少被使用。
例子中调用golang.org/x/net/html的部分api如下所示。html.Parse函数读入一组bytes解析后返回html.Node类型的HTML页面树状结构根节点。HTML拥有很多类型的结点如text文本,commnets注释类型在下面的例子中我们 只关注< name key='value' >形式的结点。
例子中调用golang.org/x/net/html的部分api如下所示。html.Parse函数读入一组bytes解析后返回html.Node类型的HTML页面树状结构根节点。HTML拥有很多类型的结点如text文本commnets注释类型在下面的例子中我们 只关注< name key='value' >形式的结点。
<u><i>golang.org/x/net/html</i></u>
```Go
@@ -157,6 +157,6 @@ $ ./fetch https://golang.org | ./outline
**练习 5.2** 编写函数记录在HTML树中出现的同名元素的次数。
**练习 5.3** 编写函数输出所有text结点的内容。注意不要访问`<script>``<style>`元素,因为这些元素对浏览者是不可见的。
**练习 5.3** 编写函数输出所有text结点的内容。注意不要访问`<script>``<style>`元素因为这些元素对浏览者是不可见的。
**练习 5.4** 扩展visit函数使其能够处理其他类型的结点如images、scripts和style sheets。

View File

@@ -110,7 +110,7 @@ func countWordsAndImages(n *html.Node) (words, images int) { /* ... */ }
return words, images, err
```
当一个函数有多处return语句以及许多返回值时bare return 可以减少代码的重复但是使得代码难以被理解。举个例子如果你没有仔细的审查代码很难发现前2处return等价于 return 0,0,errGo会将返回值 words和images在函数体的开始处根据它们的类型将其初始化为0最后一处return等价于 return wordsimagenil。基于以上原因不宜过度使用bare return。
当一个函数有多处return语句以及许多返回值时bare return 可以减少代码的重复但是使得代码难以被理解。举个例子如果你没有仔细的审查代码很难发现前2处return等价于 return 0,0,errGo会将返回值 words和images在函数体的开始处根据它们的类型将其初始化为0最后一处return等价于 return words, image, nil。基于以上原因不宜过度使用bare return。
**练习 5.5** 实现countWordsAndImages。参考练习4.9如何分词)

View File

@@ -1,6 +1,5 @@
## 5.4. 错误
在Go中有一部分函数总是能成功的运行。比如strings.Contains和strconv.FormatBool函数对各种可能的输入都做了良好的处理使得运行时几乎不会失败除非遇到灾难性的、不可预料的情况比如运行时的内存溢出。导致这种错误的原因很复杂难以处理从错误中恢复的可能性也很低。
还有一部分函数只要输入的参数满足一定条件也能保证运行成功。比如time.Date函数该函数将年月日等参数构造成time.Time对象除非最后一个参数时区是nil。这种情况下会引发panic异常。panic是来自被调用函数的信号表示发生了某个已知的bug。一个良好的程序永远不应该发生panic异常。
@@ -20,14 +19,14 @@ if !ok {
通常导致失败的原因不止一种尤其是对I/O操作而言用户需要了解更多的错误信息。因此额外的返回值不再是简单的布尔类型而是error类型。
内置的error是接口类型。我们将在第七章了解接口类型的含义以及它对错误处理的影响。现在我们只需要明白error类型可能是nil或者non-nil。nil意味着函数运行成功non-nil表示失败。对于non-nil的error类型,我们可以通过调用error的Error函数或者输出函数获得字符串类型的错误信息。
内置的error是接口类型。我们将在第七章了解接口类型的含义以及它对错误处理的影响。现在我们只需要明白error类型可能是nil或者non-nil。nil意味着函数运行成功non-nil表示失败。对于non-nil的error类型我们可以通过调用error的Error函数或者输出函数获得字符串类型的错误信息。
```Go
fmt.Println(err)
fmt.Printf("%v", err)
```
通常当函数返回non-nil的error时其他的返回值是未定义的(undefined),这些未定义的返回值应该被忽略。然而有少部分函数在发生错误时仍然会返回一些有用的返回值。比如当读取文件发生错误时Read函数会返回可以读取的字节数以及错误信息。对于这种情况正确的处理方式应该是先处理这些不完整的数据再处理错误。因此对函数的返回值要有清晰的说明以便于其他人使用。
通常当函数返回non-nil的error时其他的返回值是未定义的(undefined)这些未定义的返回值应该被忽略。然而有少部分函数在发生错误时仍然会返回一些有用的返回值。比如当读取文件发生错误时Read函数会返回可以读取的字节数以及错误信息。对于这种情况正确的处理方式应该是先处理这些不完整的数据再处理错误。因此对函数的返回值要有清晰的说明以便于其他人使用。
在Go中函数运行失败时会返回错误信息这些错误信息被认为是一种预期的值而非异常exception这使得Go有别于那些将函数运行失败看作是异常的语言。虽然Go有各种异常机制但这些机制仅被使用在处理那些未被预料到的错误即bug而不是那些在健壮程序中应该被避免的程序错误。对于Go的异常机制我们将在5.9介绍。

View File

@@ -49,9 +49,9 @@
<u><i>gopl.io/ch5/outline2</i></u>
```Go
// forEachNode针对每个结点x,都会调用pre(x)和post(x)。
// forEachNode针对每个结点x都会调用pre(x)和post(x)。
// pre和post都是可选的。
// 遍历孩子结点之前,pre被调用
// 遍历孩子结点之前pre被调用
// 遍历孩子结点之后post被调用
func forEachNode(n *html.Node, pre, post func(n *html.Node)) {
if pre != nil {

View File

@@ -242,6 +242,6 @@ http://research.swtch.com/gotour
**练习5.13** 修改crawl使其能保存发现的页面必要时可以创建目录来保存这些页面。只保存来自原始域名下的页面。假设初始页面在golang.org下就不要保存vimeo.com下的页面。
**练习5.14** 使用breadthFirst遍历其他数据结构。比如topoSort例子中的课程依赖关系有向图,个人计算机的文件层次结构(树)你所在城市的公交或地铁线路(无向图)。
**练习5.14** 使用breadthFirst遍历其他数据结构。比如topoSort例子中的课程依赖关系有向图个人计算机的文件层次结构(树)你所在城市的公交或地铁线路(无向图)。
{% include "./ch5-06-1.md" %}

View File

@@ -15,7 +15,7 @@ func sum(vals...int) int {
}
```
sum函数返回任意个int型参数的和。在函数体中,vals被看作是类型为[] int的切片。sum可以接收任意数量的int型参数
sum函数返回任意个int型参数的和。在函数体中vals被看作是类型为[] int的切片。sum可以接收任意数量的int型参数
```Go
fmt.Println(sum()) // "0"

View File

@@ -64,4 +64,4 @@ func soleTitle(doc *html.Node) (title string, err error) {
有些情况下我们无法恢复。某些致命错误会导致Go在运行时终止程序如内存不足。
**练习5.19** 使用panic和recover编写一个不包含return语句但能返回一个非零值的函数。
**练习5.19** 使用panic和recover编写一个不包含return语句但能返回一个非零值的函数。