lazymultireader

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2023 License: MIT Imports: 1 Imported by: 0

README

LazyMultiReader

LazyMultiReader is an alternative package for io.MultiReader, where the composing reader streams are only opened when they are read from. It can be used when the underlying readers are prone to timeouts, especially for socket/network connections.

Installation

go get -u github.com/shivanthzen/lazymultireader

Usage

package main

import (
	"io"
	"log"
	"os"
	"strings"
        "github.com/shivanthzen/lazymultireader"
)



type stringReadOpener struct {
	strings.Reader
}

func (b *stringReadOpener) Open() error {
	// nop

	return nil
}

func NewStringReadOpener(s string) *stringReadOpener {
	return &stringReadOpener{
		*strings.NewReader(s),
	}
}

func main() {
	r1 := NewStringReadOpener("first reader ")
	r2 := NewStringReadOpener("second reader ")
	r3 := NewStringReadOpener("third reader\n")
	r := lazymultireader.NewLazyMultiReader(r1, r2, r3)

	if _, err := io.Copy(os.Stdout, r); err != nil {
		log.Fatal(err)
	}

}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewLazyMultiReader

func NewLazyMultiReader(s ...ReadOpener) io.Reader

Types

type LazyMultiReader

type LazyMultiReader struct {
	// contains filtered or unexported fields
}

func (*LazyMultiReader) Read

func (mr *LazyMultiReader) Read(p []byte) (n int, err error)

type ReadOpener

type ReadOpener interface {
	Open() error
	io.Reader
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL