知识卡片

接口值里藏着的指针语义

专业/工作 · 475.b

内容

ServeHTTP的两个参数里,*Request是显式的指针好理解(要让服务器感知处理器对请求的修改,必须传引用),但ResponseWriter看起来是以传值方式传递的接口,为什么处理器对它的写入服务器也能看到?发散:这揭示了Go接口的一个容易被忽略的本质——接口值的”传值”只拷贝了(类型,指针)这个二元组本身,真正的数据是否被共享,完全取决于装进接口里的具体类型是不是指针类型。

参考来源

- 位置:《Go Web编程》第4章《处理请求》(源文件:_epub-src/OEBPS/text00017.html) - 结论依据:原文在该章节围绕“`ServeHTTP`的两个参数里,`*Request`是显式的指针好理解(要让服务器感知处理器对请求的修改,…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:orted)的结构,所以用户只能通过 ResponseWriter 来使用这个结构,而不能直接使用它。 为什么要以传值的方式将ResponseWriter传递给ServeHTTP 在阅读了本章前面的内容之后,有的读者可能会感到疑惑—— ServeHTTP 为什么要接受 ResponseWriter 接口和一个指向 Request 结构的指…