为了账号安全,请及时绑定邮箱和手机立即绑定

服务器是否需要是一个指针

服务器是否需要是一个指针

Go
慕慕森 2023-08-07 10:33:40
根据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方法的集合(即还包含 的方法集)。*TTT

所以对于和func (*Server) ListenAndServe都适用。Server*Server


查看完整回答
反对 回复 2023-08-07
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这两个示例都使用 的地址http.Server。第一个示例明确采用 的地址http.Server

在第二个示例中,调用 server.ListenAndServe()是 的简写(&server).ListenAndServe()

以下是速记规范中的相关文本:

如果 x(的类型)的方法集包含 m 并且参数列表可以分配给 m 的参数列表,则方法调用 xm() 是有效的。如果 x 是可寻址的并且 &x 的方法集包含 m,则 xm() 是 (&x).m() 的简写

应用短句柄是因为变量server是可寻址的并且&server其方法集包含ListenAndServe()


查看完整回答
反对 回复 2023-08-07
?
一只名叫tom的猫

TA贡献1906条经验 获得超2个赞

该方法是使用指针接收器定义的,这意味着必须在可寻址接收器上调用它。因此,例如:

func f() http.Server {...}

f().ListenAndServe()

行不通。

你打电话时:

server.ListenAndServe()

该方法接收的是地址server而不是它的副本。


查看完整回答
反对 回复 2023-08-07
  • 3 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信