mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 01:08:53 +08:00
11.8-11.9
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
## 翻译进度
|
## 翻译进度
|
||||||
|
|
||||||
11.7 [第一个例子:使用Sorter接口排序](eBook/11.7.md)
|
11.9 [空接口](eBook/11.9.md)
|
||||||
|
|
||||||
## 支持本书
|
## 支持本书
|
||||||
|
|
||||||
|
@@ -28,4 +28,4 @@ Golang 编程:245386165
|
|||||||
|
|
||||||
|更新日期 |更新内容
|
|更新日期 |更新内容
|
||||||
|----------|------------------
|
|----------|------------------
|
||||||
|2015-09-12|11.7 第一个例子:使用Sorter接口排序
|
|2015-09-13|11.9 空接口
|
4
TOC.md
4
TOC.md
@@ -95,4 +95,6 @@
|
|||||||
- 11.4 [类型判断:type-switch](eBook/11.4.md)
|
- 11.4 [类型判断:type-switch](eBook/11.4.md)
|
||||||
- 11.5 [测试一个值是否实现了某个接口](eBook/11.5.md)
|
- 11.5 [测试一个值是否实现了某个接口](eBook/11.5.md)
|
||||||
- 11.6 [使用方法集与接口](eBook/11.6.md)
|
- 11.6 [使用方法集与接口](eBook/11.6.md)
|
||||||
- 11.7 [第一个例子:使用Sorter接口排序](eBook/11.7.md)
|
- 11.7 [第一个例子:使用 Sorter 接口排序](eBook/11.7.md)
|
||||||
|
- 11.8 [第二个例子:读和写](eBook/11.8.md)
|
||||||
|
- 11.9 [空接口](eBook/11.9.md)
|
0
eBook/11.10.md
Normal file
0
eBook/11.10.md
Normal file
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
读和写是软件中很普遍的行为,提起它们会立即想到读写文件、缓存(比如字节或字符串切片)、标准输入输出、标准错误以及网络连接、管道等等,或者读写我们的自定义类型。为了是代码尽可能通用,Go 采取了一致的方式来读写数据。
|
读和写是软件中很普遍的行为,提起它们会立即想到读写文件、缓存(比如字节或字符串切片)、标准输入输出、标准错误以及网络连接、管道等等,或者读写我们的自定义类型。为了是代码尽可能通用,Go 采取了一致的方式来读写数据。
|
||||||
|
|
||||||
`io` 包提供了用于读和写的接口:`io.Reader` 和 `io.Writer`
|
`io` 包提供了用于读和写的接口 `io.Reader` 和 `io.Writer`:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
type Reader interface {
|
type Reader interface {
|
||||||
@@ -20,7 +20,7 @@ type Writer interface {
|
|||||||
|
|
||||||
在实际编程中尽可能的使用这些接口,会使程序变得更通用,可以在任何实现了这些接口的类型上使用读写方法。
|
在实际编程中尽可能的使用这些接口,会使程序变得更通用,可以在任何实现了这些接口的类型上使用读写方法。
|
||||||
|
|
||||||
例如一个 `JPEG` 图形解码器,通过一个 `Reader` 参数,它可以解码来自磁盘、网络连接或以 `gzip` 压缩的 `HTTP` 流中的 `JPEG`图形数据,或者其他任何实现了`Reader` 接口的对象。
|
例如一个 `JPEG` 图形解码器,通过一个 `Reader` 参数,它可以解码来自磁盘、网络连接或以 `gzip` 压缩的 `HTTP` 流中的 `JPEG` 图形数据,或者其他任何实现了 `Reader` 接口的对象。
|
||||||
|
|
||||||
## 链接
|
## 链接
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
## 11.9.1 概念
|
## 11.9.1 概念
|
||||||
|
|
||||||
**空接口或者最小接口**不包含任何方法,它对实现不做任何要求:
|
**空接口或者最小接口** 不包含任何方法,它对实现不做任何要求:
|
||||||
|
|
||||||
```go
|
```go
|
||||||
type Any interface {}
|
type Any interface {}
|
||||||
@@ -154,9 +154,9 @@ var dataSlice []myType = FuncReturnSlice()
|
|||||||
var interfaceSlice []interface{} = dataSlice
|
var interfaceSlice []interface{} = dataSlice
|
||||||
```
|
```
|
||||||
|
|
||||||
可惜不能这么做,编译时会出错:`cannot use dataSlice (type []myType) as type []interface { } in assignment`
|
可惜不能这么做,编译时会出错:`cannot use dataSlice (type []myType) as type []interface { } in assignment`。
|
||||||
|
|
||||||
原因是它们俩在内存中的布局是不一样的(参考[http://golang.org/doc/go_spec.html](http://golang.org/doc/go_spec.html))。
|
原因是它们俩在内存中的布局是不一样的(参考 [官方说明](http://golang.org/doc/go_spec.html))。
|
||||||
|
|
||||||
必须使用 `for-range` 语句来一个一个显式地复制:
|
必须使用 `for-range` 语句来一个一个显式地复制:
|
||||||
|
|
||||||
@@ -252,4 +252,4 @@ func f3(x myInterface) {
|
|||||||
|
|
||||||
- [目录](directory.md)
|
- [目录](directory.md)
|
||||||
- 上一节:[第二个例子:读和写](11.8.md)
|
- 上一节:[第二个例子:读和写](11.8.md)
|
||||||
- 下一节:[反射包](11.10.md)
|
- 下一节:[对结构进行反射](11.10.md)
|
@@ -100,7 +100,7 @@
|
|||||||
- 11.4 [类型判断:type-switch](11.4.md)
|
- 11.4 [类型判断:type-switch](11.4.md)
|
||||||
- 11.5 [测试一个值是否实现了某个接口](11.5.md)
|
- 11.5 [测试一个值是否实现了某个接口](11.5.md)
|
||||||
- 11.6 [使用方法集与接口](11.6.md)
|
- 11.6 [使用方法集与接口](11.6.md)
|
||||||
- 11.7 [第一个例子:使用Sorter接口排序](11.7.md)
|
- 11.7 [第一个例子:使用 Sorter 接口排序](11.7.md)
|
||||||
- 11.8 [第二个例子:读和写](11.8.md)
|
- 11.8 [第二个例子:读和写](11.8.md)
|
||||||
- 11.9 [空接口](11.9.md)
|
- 11.9 [空接口](11.9.md)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user