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

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

Go 中的阻塞構造函數

Go 中的阻塞構造函數

Go
四季花海 2023-07-04 19:05:31
假設我有一個 type Connection,它代表一個 TCP 連接。建立連接是一個阻塞操作。我看到兩種設計其界面的方法,我的問題是哪一種在 Go 中更慣用:func NewConnection(...) (*Connection, error)阻止并返回已建立的連接。優點: 不能有 invalid Connections 閑逛。Connection內存中的任何一個都是已建立的、有效的連接。缺點:阻塞構造函數可能會令人驚訝。func NewConnection(...) Connection立即返回一個新的連接,我們需要調用一個阻塞func (c *Connection) Establish() error來實際建立連接。優點:非阻塞構造函數對我來說似乎更“正常”。缺點:人們可能會忘記打電話Establish。在這種情況下這是微不足道的,但如果類型很復雜并且我們需要對其進行大量配置(甚至可能需要按特定順序調用事物),這會給程序員帶來更大的機會搞砸。
查看完整描述

1 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

正如評論所暗示的,阻塞構造函數沒有任何問題,但函數的命名應該反映它可能阻塞的事實。文檔也應該如此。

在標準庫中,如果您想創建一個新套接字并連接到某個服務器,您可以通過一次調用來完成:net.Dial

func Dial(network, address string) (Conn, error)

這是一個返回新的阻塞操作Conn。

所以在 Go 中這樣做是慣用的,你應該正確命名它。我同意你的直覺,即#2 的可用性不太好。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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