![](/img/trans.png)
[英]In Go why can we use *os.File as a parameter in bufio.NewScanner when the definition suggests, it should only accept io.Reader?
[英]Difference between os.File, io.Reader and os.Stdin
我在官方go docs中查看了NewScanner ,它提到了要傳遞給bufio.NewScanner
的參數應該是io.Reader
類型。 但是,以下對我有用:
file, err := os.Open("filename")
scanner := bufio.NewScanner(file)
os.Stdin
也可以看到相同的結果。 鑒於此, os.File
, os.Stdin
和io.Reader
什么io.Reader
? 它們可以互換嗎?
這是因為bufio.NewScanner
將io.Reader
作為參數。
func NewScanner(r io.Reader) *Scanner
io.Reader
是包裝基本Read方法的接口。
type Reader interface {
Read(p []byte) (n int, err error)
}
從Golang的os包中:
打開將打開命名文件以供讀取。 如果成功,則可以使用返回文件上的方法進行讀取; 關聯的文件描述符的模式為O_RDONLY。 如果有錯誤,它將是* PathError類型。
func Open(name string) (file *File, err error)
返回值*os.File
實現io.Reader
。
因此,無論實現Reader接口,都可以將io.Reader
作為參數傳遞給任何方法作為參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.