go mysql包_使用xorm中的QuryString查询方法时 github.com/go-sql-driver/mysql 中的packets包报这个错 [mysql] 2017/09/22...

开启2万个协程这些协程的处理函数是一个只是传入的参数不同,但是协程处理函数中的使用xorm 中的QuryString查询方法时

github.com/go-sql-driver/mysql

中的packets包报这个错

[mysql] 2017/09/22 17:30:30 packets.go:38: unexpected EOF(有的协程报这个错有的不报)

packets包相关代码如下:

// Read packet to buffer ‘data’

func (mc *mysqlConn) readPacket() ([]byte, error) {

var prevData []byte

for {

// read packet header

data, err := mc.buf.readNext(4)

if err != nil {

errLog.Print("readPacket:", data, err)

if cerr := mc.canceled.Value(); cerr != nil {

return nil, cerr

}

errLog.Print(err)

panic(err)

mc.Close()

return nil, driver.ErrBadConn

}

// packet length [24 bit]

pktLen := int(uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16)

// check packet sync [8 bit]

if data[3] != mc.sequence {

if data[3] > mc.sequence {

return nil, ErrPktSyncMul

}

return nil, ErrPktSync

}

mc.sequence++

// packets with length 0 terminate a previous packet which is a

// multiple of (2^24)−1 bytes long

if pktLen == 0 {

// there was no previous packet

if prevData == nil {

errLog.Print(ErrMalformPkt)

mc.Close()

return nil, driver.ErrBadConn

}

return prevData, nil

}

// read packet body [pktLen bytes]

data, err = mc.buf.readNext(pktLen)

if err != nil {

if cerr := mc.canceled.Value(); cerr != nil {

return nil, cerr

}

errLog.Print(err)

mc.Close()

return nil, driver.ErrBadConn

}

// return data if this was the last packet

if pktLen < maxPacketSize {

// zero allocations for non-split packets

if prevData == nil {

return data, nil

}

return append(prevData, data...), nil

}

prevData = append(prevData, data...)

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值