问题描述
// 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打开文件时
When I use os.Open to open a file
dictFile, err := os.Open(file)
我将把dicFile传递给
I'm going to pass dicFile to
reader := bufio.NewReader(dictFile)
NewReaderSize rd.(* Reader) Reader bufio Reader rd.(* Reader)
NewReaderSizerd.(*Reader)ReaderbufioReaderrd.(*Reader)
推荐答案
newReaderSize io.Reader Reader的指针 bufio struct
newReaderSizeio.ReaderReaderstructbufio
这称为类型断言:
b, ok := rd.(*Reader)
根据golang规范:
From golang spec:
对于接口类型为T且类型为T的表达式x,主要表达式 x.(T)断言x不为nil,并且存储的值x中的T是类型T.符号x.(T)称为类型断言.
For an expression x of interface type and a type T, the primary expression x.(T) asserts that x is not nil and that the value stored in x is of type T. The notation x.(T) is called a type assertion.
* Reader Reader
*ReaderReader
这篇关于星号(* struct)表示法在golang中是什么意思的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!