回答

收藏

在 Go HTTP 处理程序中,为什么 ResponseWriter 是一个值而 Request 是一个

技术问答 技术问答 494 人阅读 | 0 人回复 | 2023-09-11

我正在通过为 GAE 编写应用程序学习 Go,这是处理程序函数的签名:
! s: E( }  i* |) |/ ?9 j
    func handle(w http.ResponseWriter,r *http.Request) {}
    2 ~6 B& c6 X& ]- S8 W
为什么我是这里的指针新手?Request对象是指针,但是ResponseWriter不是吗?是否需要这样使用还是只是为了使基于高级指针的代码成为可能?0 n$ q6 N3 H6 T1 Y9 e4 J$ S
                                                                . Y8 Z0 T: o' Y7 I3 N
    解决方案:                                                                ) D" W: U; c4 @; J, @4 c& B
                                                                你得到的w指向非导出类型的指针,http.response但作为ResponseWriter它看不见的接口。
/ d8 z7 Y  S) R6 k从server.go:) c) C4 ]4 l! G. O/ Q, q
    type ResponseWriter interface    ...}
    9 Q* K; u* u# |
另一方面,r指向特定结构的指针,需要引用显式传输。  @7 V; i3 w' {1 e, K' u# A" J0 \
从request.go:
' D7 [) Z* t" y% X8 w
    type Request struct    ...}
    - W" O9 u6 }# w$ i! \* R" K: n- D
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则