buf := make([]byte, 4)
_, _ = xxx.Read(buf) // xxx 是net.Conn
bagFlag := uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16 | uint32(data[3])<<24
// fmt.Println("") // 如果注释掉这一条,bagFlag的值不是预期的值,加上就能正常获取预期的值。
if bagFlag != 4294967295 {
continue
}
那句fmt.Println 注释掉就没法获取到预期的值,加上就正常了。吐血啦,不知道原因在哪啊。
有疑问加站长微信联系(非本文作者)

data数据是啥
data:=[4]byte{255,255,255,255} bagFlag := uint32(data[0]) | uint32(data[1])<<8 | uint32(data[2])<<16 | uint32(data[3])<<24 先看你data数据对不对
的确 挺诡异
Reader interface 并不是全部读完了才会返回, 你需要等返回的err 是EOF才能下一步,加了fmt.Println之后相当于增加了等待了时间让网络读取完数据
zan
读的时候用 io.readfull() 试试
因为Read是异步的吧? 还没读完. 加个print 有耗时了, 就读完了, 就正确了. 你换成 sleep 估计也可以
正解 需要 ReadFull
楼上在搞什么,read读取时阻塞的啊。而且就算时异步的,print打印的阻塞也在bagFlag 赋值之后,是没效果的
一楼问的没错啊,data是个啥,和buf都不是同一个变量