问题描述

// 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屋!