15.go开源groupcache项目笔记——sinks代码
结构体和接口
类型Sink
为接口。
type Sink interface {
SetString(sstring) error
SetBytes(v[]byte) error
SetProto(mproto.Message) error
view()(ByteView, error)
}
然后定义了不同的结构体。每个结构体都实现各自的接口。
stringSink
type stringSink struct {
sp*string
v ByteView
}
byteViewSink
type byteViewSink struct {
dst*ByteView
}
protoSink
type protoSink struct {
dstproto.Message // authorative value
typstring
vByteView // encoded
}
truncBytesSink
type truncBytesSink struct {
dst*[]byte
v ByteView
}
allocBytesSink
type allocBytesSink struct {
dst*[]byte
v ByteView
}
cloneBytes函数
返回byte数组,复制参数b的数组。
setSinkView函数
入参为Sink, ByteView.
包含一个viewSetter接口,接口包含setView函数。