package ctxio
Import Path
github.com/jbenet/go-context/io (on go.dev)
Dependency Relation
imports 2 packages, and imported by one package
Involved Source Files
Package ctxio provides io.Reader and io.Writer wrappers that
respect context.Contexts. Use these at the interface between
your context code and your io.
WARNING: read the code. see how writes and reads will continue
until you cancel the io. Maybe this package should provide
versions of io.ReadCloser and io.WriteCloser that automatically
call .Close when the context expires. But for now -- since in my
use cases I have long-lived connections with ephemeral io wrappers
-- this has yet to be a need.
Package-Level Type Names (total 5, in which 2 are exported)
( T) Read(p []byte) (n int, err error)
github.com/aws/aws-sdk-go/aws.ReaderSeekerCloser
github.com/go-git/go-billy/v5.File (interface)
github.com/go-git/go-git/v5/plumbing/format/config.Decoder
github.com/go-git/go-git/v5/plumbing/format/idxfile.Decoder
*github.com/go-git/go-git/v5/plumbing/format/objfile.Reader
*github.com/go-git/go-git/v5/plumbing/protocol/packp.UploadPackResponse
*github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.Demuxer
*github.com/jackc/pgx/v4.LargeObject
*bufio.Reader
bufio.ReadWriter
*bytes.Buffer
*bytes.Reader
*cloud.google.com/go/storage.Reader
compress/flate.Reader (interface)
*compress/gzip.Reader
crypto/cipher.StreamReader
*crypto/tls.Conn
fmt.ScanState (interface)
golang.org/x/crypto/ssh.Channel (interface)
*golang.org/x/exp/rand.Rand
golang.org/x/net/internal/socks.Conn
*golang.org/x/text/transform.Reader
*google.golang.org/grpc/internal/transport.Stream
image/jpeg.Reader (interface)
*internal/poll.FD
*io.LimitedReader
*io.PipeReader
io.ReadCloser (interface)
io.Reader (interface)
io.ReadSeekCloser (interface)
io.ReadSeeker (interface)
io.ReadWriteCloser (interface)
io.ReadWriter (interface)
io.ReadWriteSeeker (interface)
*io.SectionReader
io/fs.File (interface)
io/fs.ReadDirFile (interface)
*math/rand.Rand
mime/multipart.File (interface)
*mime/multipart.Part
*mime/quotedprintable.Reader
*net.Buffers
net.Conn (interface)
*net.IPConn
*net.TCPConn
*net.UDPConn
*net.UnixConn
net/http.File (interface)
*os.File
*strings.Reader
*vendor/golang.org/x/text/transform.Reader
*ctxReader
github.com/aws/aws-sdk-go/aws/client.teeReaderCloser
*github.com/aws/aws-sdk-go/aws/request.offsetReader
*github.com/aws/aws-sdk-go/aws/request.timeoutReadCloser
github.com/go-git/go-billy/v5/helper/chroot.file
github.com/go-git/go-billy/v5/osfs.file
github.com/go-git/go-git/v5/plumbing/format/packfile.objectReader
*github.com/go-git/go-git/v5/plumbing/format/packfile.scannerReader
*github.com/go-git/go-git/v5/storage/filesystem/dotgit.syncedReader
github.com/go-git/go-git/v5/utils/ioutil.readCloser
*github.com/go-git/go-git/v5/utils/ioutil.readerOnError
github.com/go-git/go-git/v5/utils/ioutil.readPeeker (interface)
*github.com/Masterminds/squirrel.sqlizerBuffer
*archive/zip.checksumReader
*archive/zip.openDir
*archive/zip.pooledFlateReader
*compress/bzip2.reader
*compress/flate.decompressor
*compress/zlib.reader
*crypto/ecdsa.zr
*crypto/rand.devReader
crypto/rand.hideAgainReader
*crypto/rand.reader
*crypto/tls.atLeastReader
*encoding/base32.decoder
*encoding/base32.newlineFilteringReader
*encoding/base64.decoder
*encoding/base64.newlineFilteringReader
*encoding/gob.decBuffer
*encoding/hex.decoder
*encoding/json.encodeState
*fmt.ss
*fmt.stringReader
*go.opencensus.io/plugin/ochttp.bodyTracker
*go.opencensus.io/plugin/ochttp.tracker
golang.org/x/crypto/openpgp.checkReader
*golang.org/x/crypto/openpgp.signatureCheckReader
*golang.org/x/crypto/openpgp/armor.lineReader
*golang.org/x/crypto/openpgp/armor.openpgpReader
*golang.org/x/crypto/openpgp/packet.partialLengthReader
*golang.org/x/crypto/openpgp/packet.seMDCReader
golang.org/x/crypto/openpgp/packet.seReader
*golang.org/x/crypto/openpgp/packet.spanReader
*golang.org/x/crypto/ssh.buffer
golang.org/x/crypto/ssh.chanConn
*golang.org/x/crypto/ssh.channel
*golang.org/x/crypto/ssh.extChannel
golang.org/x/crypto/ssh.tcpChan
*golang.org/x/mod/modfile.printer
*golang.org/x/net/http2.dataBuffer
golang.org/x/net/http2.errorReader
*golang.org/x/net/http2.gzipReader
*golang.org/x/net/http2.pipe
golang.org/x/net/http2.pipeBuffer (interface)
*golang.org/x/net/http2.requestBody
golang.org/x/net/http2.transportResponseBody
*golang.org/x/text/unicode/norm.normReader
*google.golang.org/api/internal/gensupport.contentSniffer
*google.golang.org/api/internal/gensupport.multipartReader
google.golang.org/api/internal/gensupport.readerTyper
google.golang.org/api/internal/gensupport.typeReader
*google.golang.org/grpc.bufConn
*google.golang.org/grpc/credentials/alts/internal/conn.conn
google.golang.org/grpc/internal/credentials.syscallConn
*google.golang.org/grpc/internal/transport.recvBufferReader
*google.golang.org/grpc/internal/transport.transportReader
image.reader (interface)
io.eofReader
*io.multiReader
io.nopCloser
*io.pipe
*io.teeReader
math/big.byteReader
mime/multipart.partReader
mime/multipart.sectionReadCloser
*mime/multipart.stickyErrorReader
*net.conn
*net.netFD
*net.pipe
*net/http.body
*net/http.bodyEOFSignal
net/http.bodyLocked
*net/http.byteReader
*net/http.cancelTimerBody
*net/http.connReader
net/http.errorReader
*net/http.expectContinueReader
net/http.finishAsyncByteRead
*net/http.gzipReader
*net/http.http2dataBuffer
net/http.http2errorReader
*net/http.http2gzipReader
*net/http.http2pipe
net/http.http2pipeBuffer (interface)
*net/http.http2requestBody
net/http.http2transportResponseBody
net/http.ioFile
*net/http.loggingConn
*net/http.maxBytesReader
net/http.noBody
*net/http.persistConn
*net/http.readTrackingBody
*net/http.readWriteCloserBody
net/http.socksConn
*net/http/httputil.delegateReader
net/http/httputil.dumpConn
net/http/httputil.failureToReadBody
net/http/httputil.neverEnding
*net/http/internal.chunkedReader
*net/textproto.dotReader
os/exec.closeOnce
*vendor/golang.org/x/crypto/hkdf.hkdf
*vendor/golang.org/x/text/unicode/norm.normReader
T : io.Reader
( T) Write(p []byte) (n int, err error)
*github.com/cespare/xxhash/v2.Digest
github.com/go-git/go-billy/v5.File (interface)
github.com/go-git/go-git/v5/plumbing.Hasher
*github.com/go-git/go-git/v5/plumbing.MemoryObject
github.com/go-git/go-git/v5/plumbing/format/diff.UnifiedEncoder
github.com/go-git/go-git/v5/plumbing/format/idxfile.Encoder
*github.com/go-git/go-git/v5/plumbing/format/objfile.Writer
*github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.Muxer
github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.Progress (interface)
*github.com/go-git/go-git/v5/storage/filesystem/dotgit.ObjectWriter
*github.com/go-git/go-git/v5/storage/filesystem/dotgit.PackWriter
*github.com/go-redis/redis/v8/internal/pool.Conn
github.com/go-redis/redis/v8/internal/proto.Writer
*github.com/jackc/pgx/v4.LargeObject
github.com/yuin/goldmark/util.BufWriter (interface)
bufio.ReadWriter
*bufio.Writer
*bytes.Buffer
*cloud.google.com/go/storage.Writer
*compress/flate.Writer
*compress/gzip.Writer
*compress/zlib.Writer
crypto/cipher.StreamWriter
*crypto/tls.Conn
fmt.State (interface)
*golang.org/x/crypto/poly1305.MAC
golang.org/x/crypto/ssh.Channel (interface)
*golang.org/x/net/http2/hpack.Decoder
golang.org/x/net/internal/socks.Conn
*golang.org/x/text/transform.Writer
hash.Hash (interface)
hash.Hash32 (interface)
hash.Hash64 (interface)
*internal/poll.FD
*io.PipeWriter
io.ReadWriteCloser (interface)
io.ReadWriter (interface)
io.ReadWriteSeeker (interface)
io.WriteCloser (interface)
io.Writer (interface)
io.WriteSeeker (interface)
*mime/quotedprintable.Writer
net.Conn (interface)
*net.IPConn
*net.TCPConn
*net.UDPConn
*net.UnixConn
net/http.ResponseWriter (interface)
*net/http/httptest.ResponseRecorder
net/http/internal.FlushAfterChunkWriter
*os.File
*strings.Builder
*text/tabwriter.Writer
*vendor/golang.org/x/crypto/poly1305.MAC
*vendor/golang.org/x/net/http2/hpack.Decoder
*vendor/golang.org/x/text/transform.Writer
*ctxWriter
*github.com/aws/aws-sdk-go/aws/client.logWriter
github.com/go-git/go-billy/v5/helper/chroot.file
github.com/go-git/go-billy/v5/osfs.file
*github.com/go-git/go-git/v5/plumbing/format/packfile.offsetWriter
*github.com/go-git/go-git/v5/storage/filesystem/dotgit.syncedReader
github.com/go-git/go-git/v5/utils/ioutil.writeCloser
github.com/go-git/go-git/v5/utils/ioutil.writeNopCloser
*github.com/go-git/go-git/v5/utils/ioutil.writerOnError
github.com/go-redis/redis/v8/internal/proto.writer (interface)
*github.com/golang/protobuf/proto.textWriter
*github.com/Masterminds/squirrel.sqlizerBuffer
github.com/prometheus/client_golang/prometheus/promhttp.closeNotifierDelegator
github.com/prometheus/client_golang/prometheus/promhttp.delegator (interface)
github.com/prometheus/client_golang/prometheus/promhttp.flusherDelegator
github.com/prometheus/client_golang/prometheus/promhttp.hijackerDelegator
github.com/prometheus/client_golang/prometheus/promhttp.pusherDelegator
github.com/prometheus/client_golang/prometheus/promhttp.readerFromDelegator
*github.com/prometheus/client_golang/prometheus/promhttp.responseWriterDelegator
github.com/prometheus/common/expfmt.enhancedWriter (interface)
*archive/zip.countWriter
archive/zip.dirWriter
*archive/zip.fileWriter
archive/zip.nopCloser
*archive/zip.pooledFlateWriter
cloud.google.com/go/logging.severityWriter
*compress/flate.dictWriter
*crypto/hmac.hmac
*crypto/md5.digest
*crypto/sha1.digest
*crypto/sha256.digest
*crypto/sha512.digest
crypto/tls.constantTimeHash (interface)
*crypto/tls.cthWrapper
*crypto/tls.finishedHash
*encoding/base32.encoder
*encoding/base64.encoder
*encoding/gob.encBuffer
*encoding/hex.dumper
*encoding/hex.encoder
*encoding/json.encodeState
*encoding/pem.lineBreaker
encoding/xml.printer
*fmt.pp
*go.opencensus.io/plugin/ochttp.trackingResponseWriter
*go/ast.printer
*go/printer.trimmer
*golang.org/x/crypto/openpgp.canonicalTextHash
golang.org/x/crypto/openpgp.noOpCloser
golang.org/x/crypto/openpgp.signatureWriter
*golang.org/x/crypto/openpgp/armor.encoding
*golang.org/x/crypto/openpgp/armor.lineBreaker
golang.org/x/crypto/openpgp/packet.compressedWriteCloser
golang.org/x/crypto/openpgp/packet.noOpCloser
*golang.org/x/crypto/openpgp/packet.partialLengthWriter
*golang.org/x/crypto/openpgp/packet.seMDCWriter
*golang.org/x/crypto/poly1305.mac
*golang.org/x/crypto/poly1305.macGeneric
golang.org/x/crypto/ssh.chanConn
*golang.org/x/crypto/ssh.channel
*golang.org/x/crypto/ssh.extChannel
golang.org/x/crypto/ssh.sessionStdin
*golang.org/x/crypto/ssh.singleWriter
golang.org/x/crypto/ssh.tcpChan
golang.org/x/crypto/ssh.truncatingMAC
*golang.org/x/mod/modfile.printer
golang.org/x/net/html.writer (interface)
*golang.org/x/net/http2.bufferedWriter
golang.org/x/net/http2.chunkWriter
*golang.org/x/net/http2.dataBuffer
*golang.org/x/net/http2.pipe
golang.org/x/net/http2.pipeBuffer (interface)
*golang.org/x/net/http2.responseWriter
golang.org/x/net/http2.stickyErrWriter
*golang.org/x/pkgsite/internal/godoc/dochtml.limitBuffer
*golang.org/x/pkgsite/internal/middleware.cacheRecorder
golang.org/x/pkgsite/internal/middleware.erResponseWriter
golang.org/x/pkgsite/internal/middleware.responseWriter
*golang.org/x/pkgsite/internal/middleware.statsResponseWriter
*golang.org/x/text/unicode/norm.normWriter
golang.org/x/xerrors.printer
*golang.org/x/xerrors.state
google.golang.org/grpc.bufConn
*google.golang.org/grpc/credentials/alts/internal/conn.conn
google.golang.org/grpc/internal/credentials.syscallConn
*google.golang.org/grpc/internal/transport.bufWriter
*hash/adler32.digest
*hash/crc32.digest
*hash/fnv.sum128
*hash/fnv.sum128a
*hash/fnv.sum32
*hash/fnv.sum32a
*hash/fnv.sum64
*hash/fnv.sum64a
image/jpeg.writer (interface)
io.discard
*io.multiWriter
*io.pipe
*mime/multipart.part
*net.conn
*net.netFD
*net.pipe
net.writerOnly
net/http.bufioFlushWriter
net/http.checkConnErrorWriter
*net/http.chunkWriter
*net/http.countingWriter
*net/http.http2bufferedWriter
net/http.http2chunkWriter
*net/http.http2dataBuffer
*net/http.http2pipe
net/http.http2pipeBuffer (interface)
*net/http.http2responseWriter
net/http.http2stickyErrWriter
*net/http.loggingConn
net/http.persistConnWriter
*net/http.populateResponse
net/http.readWriteCloserBody
*net/http.response
net/http.socksConn
*net/http.timeoutWriter
net/http.writerOnly
net/http/httputil.dumpConn
*net/http/httputil.maxLatencyWriter
net/http/httputil.writeFlusher (interface)
*net/http/internal.chunkedWriter
*net/textproto.dotWriter
os.onlyWriter
os/exec.closeOnce
*os/exec.prefixSuffixSaver
*strings.appendSliceWriter
testing.discard
testing.indenter
*vendor/golang.org/x/crypto/poly1305.mac
*vendor/golang.org/x/crypto/poly1305.macGeneric
*vendor/golang.org/x/text/unicode/norm.normWriter
T : github.com/go-git/go-git/v5/plumbing/protocol/packp/sideband.Progress
T : io.Writer
Package-Level Functions (total 2, both are exported)
NewReader wraps a reader to make it respect given Context.
If there is a blocking read, the returned Reader will return
whenever the context is cancelled (the return values are n=0
and err=ctx.Err().)
Note well: this wrapper DOES NOT ACTUALLY cancel the underlying
write-- there is no way to do that with the standard go io
interface. So the read and write _will_ happen or hang. So, use
this sparingly, make sure to cancel the read or write as necesary
(e.g. closing a connection whose context is up, etc.)
Furthermore, in order to protect your memory from being read
_before_ you've cancelled the context, this io.Reader will
allocate a buffer of the same size, and **copy** into the client's
if the read succeeds in time.
NewWriter wraps a writer to make it respect given Context.
If there is a blocking write, the returned Writer will return
whenever the context is cancelled (the return values are n=0
and err=ctx.Err().)
Note well: this wrapper DOES NOT ACTUALLY cancel the underlying
write-- there is no way to do that with the standard go io
interface. So the read and write _will_ happen or hang. So, use
this sparingly, make sure to cancel the read or write as necesary
(e.g. closing a connection whose context is up, etc.)
Furthermore, in order to protect your memory from being read
_after_ you've cancelled the context, this io.Writer will
first make a **copy** of the buffer.
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |