簡體   English   中英

在 Go 中為什么我們可以使用 *os.File 作為 bufio.NewScanner 中的參數,當定義建議時,它應該只接受 io.Reader?

[英]In Go why can we use *os.File as a parameter in bufio.NewScanner when the definition suggests, it should only accept io.Reader?

嘗試學習 Go 並一直在使用bufio.NewScanner來讀取文件的內容。 我使用以下代碼執行此操作:

input_file, err := os.Open("input.txt")

if err != nil {
    panic(err)
}

scanner := bufio.NewScanner(input_file)
//do stuff

以為我會查看定義並看到一些奇怪的東西(至少對我來說是這樣),上面的os.Open("input.txt")實際上返回一個*os.File並且bufio.NewScanner期望一個io.Reader作為參數。 Reader是一個接口,而File是一個結構,它不實現接口或類似的東西,如果可能的話。

但看起來這完全沒問題。 我是否缺少有關 go 工作原理的信息? 我有 C# 背景,對我來說參數是不同類型的,所以編譯器不應該允許這樣做,對嗎?

只是好奇,不知道還有什么地方可以問這個。

os.File實際上是在實現io.Reader接口。

這意味着它實現了 io.Reader 接口提供的具有相同簽名的所有方法。

在這種特殊情況下,這種方法:

func (f *File) Read(b []byte) (n int, err error)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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