簡體   English   中英

os.File,io.Reader和os.Stdin之間的區別

[英]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.Fileos.Stdinio.Reader什么io.Reader 它們可以互換嗎?

這是因為bufio.NewScannerio.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM