Go: The io.Writer interface

The io.Writer interface represents an entity to which you can write a stream of bytes:

type Writer interface {
        Write(p []byte) (n int, err error)

Write writes up to len(p) bytes from p to the underlying data stream; it returns the number of bytes written and any error encountered that caused the write to stop early.


The standard library provides many Writer implementations, and Writers are accepted as input by many utilities.

For example, since bytes.Buffer has a Write method you can write directly into the buffer using fmt.Fprintf:

var buf bytes.Buffer
fmt.Fprintf(&buf, "Size: %d MB.", 85)
str := buf.String()) // str == "Size: 85 MB."

Optimizing string writes

Some Writers in the standard library have an additional WriteString method. This method can be more efficient than the standard Write method since it writes a string directly without allocating a byte slice.

You can take direct advantage of this optimization by using the io.WriteString() function:

func WriteString(w Writer, s string) (n int, err error)

If w implements a WriteString method, it is invoked directly. Otherwise, w.Write is called exactly once.