1 // Copyright 2020 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package fs 6 7 // A StatFS is a file system with a Stat method. 8 type StatFS interface { 9 FS 10 11 // Stat returns a FileInfo describing the file. 12 // If there is an error, it should be of type *PathError. 13 Stat(name string) (FileInfo, error) 14 } 15 16 // Stat returns a FileInfo describing the named file from the file system. 17 // 18 // If fs implements StatFS, Stat calls fs.Stat. 19 // Otherwise, Stat opens the file to stat it. 20 func Stat(fsys FS, name string) (FileInfo, error) { 21 if fsys, ok := fsys.(StatFS); ok { 22 return fsys.Stat(name) 23 } 24 25 file, err := fsys.Open(name) 26 if err != nil { 27 return nil, err 28 } 29 defer file.Close() 30 return file.Stat() 31 } 32