我在官方 go docs 中查看NewScanner,它提到要传递的参数bufio.NewScanner
应该是 type io.Reader
。但是,以下对我有用:
file, err := os.Open("filename")
scanner := bufio.NewScanner(file)
也可以看到同样的情况os.Stdin
。os.File
鉴于此,os.Stdin
和之间有什么区别io.Reader
?它们可以互换吗?
我在官方 go docs 中查看NewScanner,它提到要传递的参数bufio.NewScanner
应该是 type io.Reader
。但是,以下对我有用:
file, err := os.Open("filename")
scanner := bufio.NewScanner(file)
也可以看到同样的情况os.Stdin
。os.File
鉴于此,os.Stdin
和之间有什么区别io.Reader
?它们可以互换吗?
这是因为bufio.NewScanner
hasio.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
作为参数的方法。