github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/pkg/filehash/hash.go (about) 1 package filehash 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 8 "github.com/cespare/xxhash/v2" 9 ) 10 11 var ( 12 hashFunc = xxhash.New 13 ) 14 15 func Hash(file string) ([]byte, error) { 16 f, err := os.Open(file) 17 if err != nil { 18 return nil, fmt.Errorf("failed to open: %w", err) 19 } 20 defer f.Close() 21 22 return HashBytes(io.Reader(f)) 23 } 24 25 func HashBytes(r io.Reader) ([]byte, error) { 26 h := hashFunc() 27 if _, err := io.Copy(h, r); err != nil { 28 return nil, fmt.Errorf("failed to copy: %w", err) 29 } 30 31 return h.Sum(nil), nil 32 }