简体   繁体   中英

Is it Necessary to Check “n” returned by Write In Golang

I have a server and start a goroutine for sending data. Code like this

func handleSend(conn *net.TcpConn, ch <-chan []byte) {
    for {
        select {
        case msg, ok := <-ch:
            if !ok {
                return
            }
            n, err := conn.Write(msg)
            if err != nil {
                log.Error("conn write error", err)
                return
            }
            //here

        }
    }
}

Today, I think I should check n return by conn.Write to make sure that msg is writed completely. So I add the following code in the place here

for ;n!= len(msg);{
     log.Error("conn write not completely", len(msg), "actually", n)
     msg = msg[n:]
     n, err = sess.conn.Write(msg)
     if err != nil {
         log.Error("conn write error", err)
         return
     }
 }

And I want to know is it right to do this? PS what if the peer receive message slowly and Write return with only part of the data sended successfully ?

Docs say Write must return a non-nil error if it returns n < len(p) . Usually, all write errors are equally bad and you can just assign n to _ ; you'd only have to check it in unusual cases.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM