From cd0f3ff29c0ba227a3b0f1aa8a2ccc8ba17c794e Mon Sep 17 00:00:00 2001 From: Xargin Date: Tue, 18 Oct 2016 13:03:18 +0800 Subject: [PATCH] fix escape --- ch7/ch7-03.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ch7/ch7-03.md b/ch7/ch7-03.md index bf4e936..2f67b58 100644 --- a/ch7/ch7-03.md +++ b/ch7/ch7-03.md @@ -24,7 +24,7 @@ rwc = w // compile error: io.Writer lacks Close method 因为ReadWriter和ReadWriteCloser包含所有Writer的方法,所以任何实现了ReadWriter和ReadWriteCloser的类型必定也实现了Writer接口 -在进一步学习前,必须先解释表示一个类型持有一个方法当中的细节。回想在6.2章中,对于每一个命名过的具体类型T;它一些方法的接收者是类型T本身然而另一些则是一个*T的指针。还记得在T类型的参数上调用一个*T的方法是合法的,只要这个参数是一个变量;编译器隐式的获取了它的地址。但这仅仅是一个语法糖:T类型的值不拥有所有*T指针的方法,那这样它就可能只实现更少的接口。 +在进一步学习前,必须先解释表示一个类型持有一个方法当中的细节。回想在6.2章中,对于每一个命名过的具体类型T;它一些方法的接收者是类型T本身然而另一些则是一个`*T`的指针。还记得在T类型的参数上调用一个`*T`的方法是合法的,只要这个参数是一个变量;编译器隐式的获取了它的地址。但这仅仅是一个语法糖:T类型的值不拥有所有`*T`指针的方法,那这样它就可能只实现更少的接口。 举个例子可能会更清晰一点。在第6.5章中,IntSet类型的String方法的接收者是一个指针类型,所以我们不能在一个不能寻址的IntSet值上调用这个方法: @@ -41,7 +41,7 @@ var s IntSet var _ = s.String() // OK: s is a variable and &s has a String method ``` -然而,由于只有*IntSet类型有String方法,所有也只有*IntSet类型实现了fmt.Stringer接口: +然而,由于只有`*IntSet`类型有String方法,所有也只有`*IntSet`类型实现了fmt.Stringer接口: ```go var _ fmt.Stringer = &s // OK @@ -79,14 +79,14 @@ any = new(bytes.Buffer) 对于创建的一个interface{}值持有一个boolean,float,string,map,pointer,或者任意其它的类型;我们当然不能直接对它持有的值做操作,因为interface{}没有任何方法。我们会在7.10章中学到一种用类型断言来获取interface{}中值的方法。 -因为接口实现只依赖于判断的两个类型的方法,所以没有必要定义一个具体类型和它实现的接口之间的关系。也就是说,尝试文档化和断言这种关系几乎没有用,所以并没有通过程序强制定义。下面的定义在编译期断言一个*bytes.Buffer的值实现了io.Writer接口类型: +因为接口实现只依赖于判断的两个类型的方法,所以没有必要定义一个具体类型和它实现的接口之间的关系。也就是说,尝试文档化和断言这种关系几乎没有用,所以并没有通过程序强制定义。下面的定义在编译期断言一个`*bytes.Buffer`的值实现了io.Writer接口类型: ```go // *bytes.Buffer must satisfy io.Writer var w io.Writer = new(bytes.Buffer) ``` -因为任意*bytes.Buffer的值,甚至包括nil通过(*bytes.Buffer)(nil)进行显示的转换都实现了这个接口,所以我们不必分配一个新的变量。并且因为我们绝不会引用变量w,我们可以使用空标识符来来进行代替。总的看,这些变化可以让我们得到一个更朴素的版本: +因为任意`*bytes.Buffer`的值,甚至包括nil通过`(*bytes.Buffer)(nil)`进行显示的转换都实现了这个接口,所以我们不必分配一个新的变量。并且因为我们绝不会引用变量w,我们可以使用空标识符来来进行代替。总的看,这些变化可以让我们得到一个更朴素的版本: ```go // *bytes.Buffer must satisfy io.Writer