package main import ( "crypto/sha256" "fmt" "io" "os" ) type fileSha struct { bytes []byte size int64 } func sha256File(path string) fileSha { h := sha256.New() f, err := os.Open(path) if err != nil { panic(err) } defer f.Close() fi, err := f.Stat() if err != nil { panic(err) } io.Copy(h, f) return fileSha{ bytes: h.Sum(nil), size: fi.Size(), } } func (f fileSha) String() string { return fmt.Sprintf("sha256:%x", f.bytes) } func (f fileSha) Name() string { return fmt.Sprintf("%x", f.bytes) } func (f fileSha) Size() int64 { return f.size }