// NewReaderSize returns a new Reader whose buffer has at least the specified
43 // size. If the argument io.Reader is already a Reader with large enough
44 // size, it returns the underlying Reader.
45 func NewReaderSize(rd io.Reader, size int) *Reader {
46 // Is it already a Reader?
47 b, ok := rd.(*Reader)
48 if ok && len(b.buf) >= size {
49 return b
50 }
51 if size < minReadBufferSize {
52 size = minReadBufferSize
53 }
54 r := new(Reader)
55 r.reset(make([]byte, size), rd)
56 return r
57 }
当我使用os.Open打开文件时
dictFile, err := os.Open(file)
我将传递dicFile到
reader := bufio.NewReader(dictFile)
我发现底层代码正在使用func NewReaderSize
,但是我不明白的是rd.(*Reader)
。Reader
是package中包含的结构类型bufio
。我看到的后跟一个结构的星号是从指针获得值的Reader
,但是它不是指针,因此没有任何意义。再者,它使用点运算符rd.(*Reader)
,我完全感到困惑。第47行中的这种用法是什么意思?这是一种什么样的符号?
newReaderSize
使用读取器(io.Reader
接口)并返回指向的指针Reader
(struct
在中定义bufio
)。
这称为类型断言:
b, ok := rd.(*Reader)
从golang规范:
对于接口类型为T且类型为T的表达式x,主表达式x。(T)断言x不是nil,并且存储在x中的值是T类型。符号x。(T)称为类型断言。
这行代码将那个读者带入并断言它是一种类型*Reader
,如果成功,并且其Reader
缓冲区足够大,可以立即返回(因为它已经是我们想要的)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句