nsq客戶端go-nsq有段程式碼看不懂
程式碼來源:go-nsq 中的 conn.go 中的 Connect() Connect() 方法原始碼:
// Connect dials and bootstraps the nsqd connection
// (including IDENTIFY) and returns the IdentifyResponse
func (c *Conn) Connect() (*IdentifyResponse, error) {
dialer := &net.Dialer{
LocalAddr: c.config.LocalAddr,
Timeout: c.config.DialTimeout,
}
conn, err := dialer.Dial("tcp", c.addr)
if err != nil {
return nil, err
}
c.conn = conn.(*net.TCPConn)
c.r = conn
c.w = conn
_, err = c.Write(MagicV2)
if err != nil {
c.Close()
return nil, fmt.Errorf("[%s] failed to write magic - %s", c.addr, err)
}
resp, err := c.identify()
if err != nil {
return nil, err
}
if resp != nil && resp.AuthRequired {
if c.config.AuthSecret == "" {
c.log(LogLevelError, "Auth Required")
return nil, errors.New("Auth Required")
}
err := c.auth(c.config.AuthSecret)
if err != nil {
c.log(LogLevelError, "Auth Failed %s", err)
return nil, err
}
}
c.wg.Add(2)
atomic.StoreInt32(&c.readLoopRunning, 1)
go c.readLoop()
go c.writeLoop()
return resp, nil
}
這個方法中困惑的地方是 dialer.Dial 返回的 conn 型別是 type Conn interface{..}介面,但是為什麼可以從 conn 中取出 (*net.TCPConn) 型別的資料
conn, err := dialer.Dial("tcp", c.addr)
if err != nil {
return nil, err
}
c.conn = conn.(*net.TCPConn)
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- php連結nsq客戶端PHP客戶端
- How we redesign the NSQ-NSQ重塑之客戶端客戶端
- .net客戶端呼叫activeMQ程式碼客戶端MQ
- FTP客戶端c程式碼功能實現FTP客戶端C程式
- plsql 客戶端亂碼SQL客戶端
- IE客戶客戶端程式開發的利器Bindows客戶端
- MQTT客戶端JAVA程式碼----fusesource mqtt-clientMQQT客戶端Javaclient
- 胖客戶端程式總結客戶端
- C++客戶端程式(socket)C++客戶端
- 「iOS」行車服務app 「客戶端、後端思路+程式碼」iOSAPP客戶端後端
- 使用cmd webservice wsdl網址生成客戶端程式碼Web客戶端
- OSCHINA安卓客戶端程式碼高亮解決方案安卓客戶端
- 客戶端驗證和onclick事件控制程式碼客戶端事件
- Java OAuth 2.0 客戶端程式設計(二): 客戶端憑據授權JavaOAuth客戶端程式設計
- 客戶端段建立到伺服器端的連線過程客戶端伺服器
- TCP通訊客戶端和服務端簡單程式碼實現TCP客戶端服務端
- 無密碼驗證:客戶端密碼客戶端
- 高德客戶端低程式碼系統架構實踐客戶端架構
- JavaScript判斷手機、平板電腦客戶端程式碼JavaScript客戶端
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- 分散式訊息系統Kafka Java客戶端程式碼分散式KafkaJava客戶端
- dubbo客戶端客戶端
- Pulsar客戶端客戶端
- mqtt 客戶端MQQT客戶端
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- 客戶端,服務端客戶端服務端
- 服務端,客戶端服務端客戶端
- Tars-Java客戶端原始碼分析Java客戶端原始碼
- Telegram原始碼之安卓客戶端配置原始碼安卓客戶端
- MySQL客戶端中文亂碼問題。MySql客戶端
- Nacos - 客戶端心跳續約及客戶端總結客戶端
- 我的郵箱客戶端程式Popmail客戶端AI
- 客戶端GUI程式開發漫談客戶端GUI
- 小弟求救伺服器-客戶端程式伺服器客戶端
- 客戶端Cookie中文程式設計 (轉)客戶端Cookie程式設計
- 在客戶端程式中使用REST SOE客戶端REST
- 求一段python3服務端及客戶端的例子Python服務端客戶端
- 【git操作】如何在兩個git客戶端間同步程式碼Git客戶端