根据http#Server.ListenAndServe 文档func (*Server) ListenAndServe将 server 作为指针根据[ https://golang.org/pkg/net/http/],似乎服务器应该被创建为指针server := &http.Server{ Addr: ":8080", Handler: nil, TLSConfig: nil, .....}但是,这工作得很好。我在这里缺少什么? server := http.Server{ Addr: ":8080", Handler: nil, ......}if err := server.ListenAndServe(); err!=nil{ log.Fatal("oh Dear!")}
3 回答
扬帆大鱼
TA贡献1799条经验 获得超9个赞
请参阅“使用指针接收器调用函数的 Go 语法”,以及
规范:“方法集”
对应指针类型的方法集是所有接收者为或 的
*T
方法的集合(即还包含 的方法集)。*T
T
T
所以对于和func (*Server) ListenAndServe
都适用。Server
*Server
一只斗牛犬
TA贡献1784条经验 获得超2个赞
这两个示例都使用 的地址http.Server
。第一个示例明确采用 的地址http.Server
。
在第二个示例中,调用 server.ListenAndServe()
是 的简写(&server).ListenAndServe()
。
以下是速记规范中的相关文本:
如果 x(的类型)的方法集包含 m 并且参数列表可以分配给 m 的参数列表,则方法调用 xm() 是有效的。如果 x 是可寻址的并且 &x 的方法集包含 m,则 xm() 是 (&x).m() 的简写
应用短句柄是因为变量server
是可寻址的并且&server
其方法集包含ListenAndServe()
。
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
该方法是使用指针接收器定义的,这意味着必须在可寻址接收器上调用它。因此,例如:
func f() http.Server {...} f().ListenAndServe()
行不通。
你打电话时:
server.ListenAndServe()
该方法接收的是地址server
而不是它的副本。
- 3 回答
- 0 关注
- 102 浏览
添加回答
举报
0/150
提交
取消