package main import ( "bytes" "crypto/md5" "encoding/hex" "fmt" "io" "io/ioutil" "os" ) func main() { sourceFile, _ := os.Open("source/ebook.pdf") var buf bytes.Buffer tee := io.TeeReader(sourceFile, &buf) process := func(sourceReader io.Reader) { targetFile, _ := os.Create("target/ebook.pdf") defer targetFile.Close() if _, err := io.Copy(targetFile, sourceReader); err != nil { fmt.Println(err) } } process(tee) fmt.Println(checksum(&buf)) } func checksum(buf *bytes.Buffer) string { h := md5.New() b, _ := ioutil.ReadAll(buf) if _, err := h.Write(b); err != nil { fmt.Println(err) } return hex.EncodeToString(h.Sum(nil)[:16]) }