亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

服務器是否需要是一個指針

服務器是否需要是一個指針

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條經驗 獲得超3個贊

該方法是使用指針接收器定義的,這意味著必須在可尋址接收器上調用它。因此,例如:

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

f().ListenAndServe()

行不通。

你打電話時:

server.ListenAndServe()

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


查看完整回答
反對 回復 2023-08-07
  • 3 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號