根據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 關注
- 155 瀏覽
添加回答
舉報
0/150
提交
取消