code: func (l *lazyClientConn) Write(b []byte) (int, error) {
  	n := 0
  	l.whandshakeOnce.Do(func() {
  		go l.rhandshakeOnce.Do(l.doReadHandshake)
  		n = l.doWriteHandshakeWithData(b)
  	})
  	if l.werr != nil || n > 0 {
  		return n, l.werr
  	}
  	return l.con.Write(b)
  }
docs: // Write writes the given buffer to the underlying connection.
  //
  // If the protocol has not yet been negotiated, write waits for the write half
  // of the handshake to complete triggers (but does not wait for) the read half.
  //
  // Write *also* ignores errors from the read half of the handshake (in case the
  // stream is actually write only).