Skip to content

Instantly share code, notes, and snippets.

@brydavis
Created October 30, 2018 00:02
Show Gist options
  • Save brydavis/a0cd1db30c8b84e8594a81b14dba7174 to your computer and use it in GitHub Desktop.
Save brydavis/a0cd1db30c8b84e8594a81b14dba7174 to your computer and use it in GitHub Desktop.

Revisions

  1. brydavis created this gist Oct 30, 2018.
    42 changes: 42 additions & 0 deletions multiwriter.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,42 @@
    package main

    import (
    "bytes"
    "crypto/md5"
    "encoding/hex"
    "fmt"
    "io"
    "io/ioutil"
    "os"
    )

    func main() {
    sourceFile, _ := os.Open("source/ebook.pdf")

    process := func(sourceReader io.Reader) {
    targetFile, _ := os.Create("target/ebook.pdf")
    defer targetFile.Close()

    var buf1, buf2 bytes.Buffer
    w := io.MultiWriter(targetFile, &buf1, &buf2)

    if _, err := io.Copy(w, sourceReader); err != nil {
    fmt.Println(err)
    }

    fmt.Println(checksum(&buf1))
    fmt.Println(checksum(&buf2))
    }

    process(sourceFile)

    }

    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])
    }
    38 changes: 38 additions & 0 deletions teereader.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,38 @@
    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])
    }