2014-09-01 追記
http://qiita.com/suin/items/b9c0f92851454dc6d461#comment-70c188ae8ad783fe57f9 に正しい方法が書かれていました。ありがとうございます!
func Exists(filename string) bool {
_, err := os.Stat(filename)
return err == nil
}
ここから元記事
http://stackoverflow.com/questions/12518876/how-to-check-if-a-file-exists-in-go#answer-12527546
で紹介されていますが、os.Stat()してerrを!os.IsNotExist(err)で判定するのが良いようです。
package osutil
import (
"os"
)
func Exists(name string) bool {
_, err := os.Stat(name)
return !os.IsNotExist(err)
}
なぜ、IsExist(err)のほうを使わないかというと
http://golang.org/src/pkg/os/error_posix.go
を見ればわかります。IsExist()はerrがnilのときはfalseを返すからです。err == nil | os.IsExist(err)と書けばよいという話もありますが、errがnilのときfalseを返すということはIsExist()はファイル上書きの時に存在していたらエラーという時のためにあるのだと思います。syscall.EEXISTと比較している箇所もありますし。
IsNotExistのほうなら、os.IsNotExist(err)自体がerrがnilの場合はfalseなのでerr == nil | !os.IsNotExist(err)書かなくても!os.IsNotExist(err)だけでよいわけです。