在 Go HTTP 处理程序中,为什么 ResponseWriter 是一个值而 Request 是一个
技术问答
494 人阅读
|
0 人回复
|
2023-09-11
|
我正在通过为 GAE 编写应用程序学习 Go,这是处理程序函数的签名:
! s: E( } i* |) |/ ?9 jfunc 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 wtype Request struct ...}
- W" O9 u6 }# w$ i! \* R" K: n- D |
|
|
|
|
|