golang是否文件File自带有io.Writer的属性?

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
}
阅读 1.4k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题