filegostandard-library

How to check if a file exists in Go?


Go's standard library does not have a function solely intended to check if a file exists or not (like Python's os.path.exists). What is the idiomatic way to do it?


Solution

  • To check if a file doesn't exist, equivalent to Python's if not os.path.exists(filename):

    if _, err := os.Stat("/path/to/whatever"); errors.Is(err, os.ErrNotExist) {
      // path/to/whatever does not exist
    }
    

    To check if a file exists, equivalent to Python's if os.path.exists(filename):

    if _, err := os.Stat("/path/to/whatever"); err == nil {
      // path/to/whatever exists
    
    } else if errors.Is(err, os.ErrNotExist) {
      // path/to/whatever does *not* exist
    
    } else {
      // Schrodinger: file may or may not exist. See err for details.
    
      // Therefore, do *NOT* use !os.IsNotExist(err) to test for file existence
    
    
    }