From c080b2ac6db92b6633b05e2e66a55f2fc261c44e Mon Sep 17 00:00:00 2001 From: L1nSn0w Date: Wed, 3 Sep 2025 09:52:02 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=B0=86=E2=80=9C=E5=85=88=E8=A7=89?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6=E2=80=9D=E6=9B=B4=E6=AD=A3=E4=B8=BA=E2=80=9C?= =?UTF-8?q?=E5=85=88=E5=86=B3=E6=9D=A1=E4=BB=B6=E2=80=9D=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E7=AC=A6=E5=90=88=E6=8A=80=E6=9C=AF=E8=AF=AD=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ch7/ch7-05.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ch7/ch7-05.md b/ch7/ch7-05.md index 1957557..42f54b9 100644 --- a/ch7/ch7-05.md +++ b/ch7/ch7-05.md @@ -151,7 +151,7 @@ if out != nil { 动态分配机制依然决定(\*bytes.Buffer).Write的方法会被调用,但是这次的接收者的值是nil。对于一些如\*os.File的类型,nil是一个有效的接收者(§6.2.1),但是\*bytes.Buffer类型不在这些种类中。这个方法会被调用,但是当它尝试去获取缓冲区时会发生panic。 -问题在于尽管一个nil的\*bytes.Buffer指针有实现这个接口的方法,它也不满足这个接口具体的行为上的要求。特别是这个调用违反了(\*bytes.Buffer).Write方法的接收者非空的隐含先觉条件,所以将nil指针赋给这个接口是错误的。解决方案就是将main函数中的变量buf的类型改为io.Writer,因此可以避免一开始就将一个不完整的值赋值给这个接口: +问题在于尽管一个nil的\*bytes.Buffer指针有实现这个接口的方法,它也不满足这个接口具体的行为上的要求。特别是这个调用违反了(\*bytes.Buffer).Write方法的接收者非空的隐含先决条件,所以将nil指针赋给这个接口是错误的。解决方案就是将main函数中的变量buf的类型改为io.Writer,因此可以避免一开始就将一个不完整的值赋值给这个接口: ```go var buf io.Writer @@ -162,3 +162,4 @@ f(buf) // OK ``` 现在我们已经把接口值的技巧都讲完了,让我们来看更多的一些在Go标准库中的重要接口类型。在下面的三章中,我们会看到接口类型是怎样用在排序,web服务,错误处理中的。 +