Интерфейс io.Writer описывает любой приемник данных:
type Writer interface {
Write(p []byte) (n int, err error)
}Реализуют: *os.File, *bytes.Buffer, http.ResponseWriter, сокеты и т.д. Функции вроде fmt.Fprint, io.Copy, json.Encoder принимают io.Writer, поэтому один код может писать в файл, HTTP-ответ или буфер.