johnsonjh/gfcptun

View on GitHub
generic/copy.go

Summary

Maintainability
A
0 mins
Test Coverage
package generic

import (
    "io"
)

const bufSize = 4096

// Copy ... a memory-optimized io.Copy function
func Copy(dst io.Writer, src io.Reader) (written int64, err error) {
    // If the reader has a WriteTo method, use it to do the copy.
    // Avoids an allocation and a copy.
    if wt, ok := src.(io.WriterTo); ok {
        return wt.WriteTo(dst)
    }
    // Similarly, if the writer has a ReadFrom method, use it to do the copy.
    if rt, ok := dst.(io.ReaderFrom); ok {
        return rt.ReadFrom(src)
    }

    // fallback to standard io.CopyBuffer
    buf := make([]byte, bufSize)
    return io.CopyBuffer(dst, src, buf)
}