Ring buffer算法优点:高内存使用率,在缓冲buffer内存模型中,不太容易发生内存越界、悬空指针等 bug ,出了问题也容易在内存级别分析调试。做出来的系统容易保持健壮。
packagemain import( "bytes" "fmt" ) typeRingbufstruct{ buf[]byte start,sizeint } funcNew(sizeint)*Ringbuf{ return&Ringbuf{make([]byte,size),0} } func(r*Ringbuf)Write(b[]byte){ forlen(b)>0{ start:=(r.start+r.size)%len(r.buf) n:=copy(r.buf[start:],b) b=b[n:]//golang就是要好好运用切片 ifr.size>=len(r.buf){ ifn<=len(r.buf){ r.start+=n ifr.start>=len(r.buf){ r.start=0 } }else{ r.start=0 } } r.size+=n //Sizecan'texceedthecapacity ifr.size>cap(r.buf){ r.size=cap(r.buf) } } } func(r*Ringbuf)Read(b[]byte)int{ read:=0 size:=r.size start:=r.start forlen(b)>0&&size>0{ end:=start+size ifend>len(r.buf){ end=len(r.buf) } n:=copy(b,r.buf[start:end]) size-=n read+=n b=b[n:] start=(start+n)%len(r.buf) } returnread } func(r*Ringbuf)Size()int{ returnr.size }原文链接:https://www.f2er.com/go/190147.html