| // Copyright 2020 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package fs |
| |
| // A StatFS is a file system with a Stat method. |
| type StatFS interface { |
| FS |
| |
| // Stat returns a FileInfo describing the file. |
| // If there is an error, it should be of type *PathError. |
| Stat(name string) (FileInfo, error) |
| } |
| |
| // Stat returns a [FileInfo] describing the named file from the file system. |
| // |
| // If fs implements [StatFS], Stat calls fs.Stat. |
| // Otherwise, Stat opens the [File] to stat it. |
| func Stat(fsys FS, name string) (FileInfo, error) { |
| if fsys, ok := fsys.(StatFS); ok { |
| return fsys.Stat(name) |
| } |
| |
| file, err := fsys.Open(name) |
| if err != nil { |
| return nil, err |
| } |
| defer file.Close() |
| return file.Stat() |
| } |