os.Stdout本质是一个文件File吗?
var (
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)
我使用io.Copy(os.Stdout, io.reader) 可以将reader Copy到os.Stdout中,是否文件File自带有io.Writer的属性?
到源码中寻找,发现Go中的File最终是这个结构体,没有看到哪儿有io.Writer的相关痕迹呀?
type file struct {
pfd poll.FD
name string
dirinfo *dirInfo // nil unless directory being read
appendMode bool // whether file is opened for appending
}
File 不是 file 。File 里有一个 file 的指针。不过 file 是私有的,包外并不可见。
io.Writer 是一个 interface, 里面只有一个方法
Write(p []byte) (n int, err error)
File 实现了这个方法:
func (f *File) Write(b []byte) (n int, err error)
也就是,
File
实现了io.Writer
这个 interface 。对 golang 来说,File
是一个io.Writer
。