12.go开源groupcache项目笔记——byteview代码

来源:互联网 发布:黑死馆杀人事件知乎 编辑:程序博客网 时间:2024/06/08 00:26

12.go开源groupcache项目笔记——byteview代码

定义结构体ByteView

type ByteView struct {

           //If b is non-nil, b is used, else s is used.

           b[]byte

           sstring

}

b不为空使用b,b为空就使用s.

Len函数

返回一个整型数字。

如果b不会空,返回b的数组长度,不然就返回s的长度。

ByteSlice

如果b不会空,克隆b,如果为空,克隆s.

String

如果b不会空,返回b,否则返回s.

At

如果b不会空,返回b[i],否则返回s[i]

Slice

如果b不会空,从b中截取一段返回,否则从s返回。

SliceFrom

如果b不会空,从b中截取一段从入参指定开始到结束,否则从s返回从入参指定开始到结束。

Copy

如果b不会空,复制b到一个目标数组,如果为空则复制s,同时返回复制的字节数。

Equal

如果入参b2不会空,则判断v,b2.

EqualString

如果b为空,则返将入参s赋值为v.s.直接返回。

否则继续,先获得

获得v的长度。

如果s的长度和v的长度不一样,返回false

循环v.b判断是否是s[i]相等,有一个不相等则返回false.

EqualBytes

如果b不为空,判断v.b和入参b2是否相等。并返回。

否则,获得v长度,判断与b2长度是否一样。

接着判断b2和v.s[i]是否都一样。有一个不相等则返回FALSE。

Reader

如果b不为空,通过NewReader来读取v.b,返回为io.ReadSeeker

否则返回strings.NewReader(v.s)

ReadAt

可以读取带偏移[]byte,入参为byte和off(偏移),返回n(返回的值))和err(错误信息)

通过如下实现

n =v.SliceFrom(int(off)).Copy(p)

阅读全文
0 0