All Projects → orcaman → writerseeker

orcaman / writerseeker

Licence: MIT license
WriterSeeker is the in-memory io.WriteSeeker implementation missing in the standard lib

Programming Languages

go
31211 projects - #10 most used programming language

WriterSeeker CircleCI GoDoc

WriterSeeker is the in-memory io.WriteSeeker implementation missing in the standard lib :-)

Use-case

In serverless / PaaS environments there is usually no file system access - you cannot read or write files to the container you are running in. This means that if you are using a function or library in Go that expects a File type (which implements the io.WriteSeeker interface), you are pretty much screwed. WriterSeeker solves this by letting you write and seek inside an in-memory buffer.

Usage Example

Let's say that you are using a library to generate PDF files. The library usually expects a File type to perform the writing to. You would create a File by using os.Open and then feed this to the Write function like so:

fWrite, err := os.Create(outputPath)
if err != nil {
    return err
}

defer fWrite.Close()

err = pdfWriter.Write(fWrite)

With WriterSeeker, you do not need the file, just work in-memory:

writerSeeker := &writerseeker.WriterSeeker{}
err = pdfWriter.Write(writerSeeker)

Now you can get a an io.Reader from the writerSeeker instance and boogie! for example, copy it's buffer to an io.Writer.

r := writerSeeker.Reader()
w := getWriter()
if _, err := io.Copy(w, r); err != nil {
 ...
 ...
 ...
}

License

The code is MIT licensed. It uses code from this post on StackOverflow, and according to the official docs this code can be safely used with MIT license.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].