github.com/zhangyunhao116/wyhash@v0.4.1-0.20220217162229-7d42996fa899/wysum/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 8 "github.com/zhangyunhao116/wyhash" 9 ) 10 11 func main() { 12 if contains(os.Args[1:], "-h") { 13 fmt.Fprintf(os.Stderr, `Usage: 14 %s [filenames] 15 If no filenames are provided or only - is given, input is read from stdin. 16 `, os.Args[0]) 17 os.Exit(1) 18 } 19 if len(os.Args) < 2 || len(os.Args) == 2 && os.Args[1] == "-" { 20 printHash(os.Stdin, "-") 21 return 22 } 23 for _, path := range os.Args[1:] { 24 f, err := os.Open(path) 25 if err != nil { 26 fmt.Fprintln(os.Stderr, err) 27 continue 28 } 29 printHash(f, path) 30 f.Close() 31 } 32 } 33 34 func contains(ss []string, s string) bool { 35 for _, s1 := range ss { 36 if s1 == s { 37 return true 38 } 39 } 40 return false 41 } 42 43 func printHash(r io.Reader, name string) { 44 h := wyhash.NewDefault() 45 if _, err := io.Copy(h, r); err != nil { 46 fmt.Fprintln(os.Stderr, err) 47 return 48 } 49 fmt.Printf("%016x %s\n", h.Sum64(), name) 50 }