Merge pull request #58 from fuwensun/master

一些修改
pull/59/head
Xargin 2018-05-27 18:25:41 +08:00 committed by GitHub
commit fb3359fb4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 3 deletions

View File

@ -41,7 +41,7 @@ func findLinks(url string) ([]string, error) {
在findlinks中有4处return语句每一处return都返回了一组值。前三处return将http和html包中的错误信息传递给findlinks的调用者。第一处return直接返回错误信息其他两处通过fmt.Errorf§7.8输出详细的错误信息。如果findlinks成功结束最后的return语句将一组解析获得的连接返回给用户。
在finallinks中我们必须确保resp.Body被关闭释放网络资源。虽然Go的垃圾回收机制会回收不被使用的内存但是这不包括操作系统层面的资源比如打开的文件、网络连接。因此我们必须显式的释放这些资源。
在findlinks中我们必须确保resp.Body被关闭释放网络资源。虽然Go的垃圾回收机制会回收不被使用的内存但是这不包括操作系统层面的资源比如打开的文件、网络连接。因此我们必须显式的释放这些资源。
调用多返回值函数时,返回给调用者的是一组值,调用者必须显式的将这些值分配给变量:

View File

@ -22,7 +22,7 @@ w = rwc // OK: io.ReadWriteCloser has Write method
rwc = w // compile error: io.Writer lacks Close method
```
因为ReadWriter和ReadWriteCloser包含有Writer的方法所以任何实现了ReadWriter和ReadWriteCloser的类型必定也实现了Writer接口
因为ReadWriter和ReadWriteCloser包含有Writer的方法所以任何实现了ReadWriter和ReadWriteCloser的类型必定也实现了Writer接口
在进一步学习前必须先解释一个类型持有一个方法的表示当中的细节。回想在6.2章中对于每一个命名过的具体类型T它的一些方法的接收者是类型T本身然而另一些则是一个`*T`的指针。还记得在T类型的参数上调用一个`*T`的方法是合法的只要这个参数是一个变量编译器隐式的获取了它的地址。但这仅仅是一个语法糖T类型的值不拥有所有`*T`指针的方法,这样它就可能只实现了更少的接口。
@ -34,7 +34,7 @@ func (*IntSet) String() string
var _ = IntSet{}.String() // compile error: String requires *IntSet receiver
```
但是我们可以在一个IntSet上调用这个方法:
但是我们可以在一个IntSet变量上调用这个方法:
```go
var s IntSet