io: add ReadAtSizer interface

ReadAtSizer is a common abstraction for a stateless,
concurrently-readable fixed number of bytes.

This interface has existed in various codebases for over 3 years (previously
usually named SizeReaderAt). It is used inside Google in dl.google.com
(mentioned in https://talks.golang.org/2013/oscon-dl.slide) and other
packages. It is used in Camlistore, in Juju, in the Google API Go client, in
github.com/nightlyone/views, and 33 other pages of Github search results.

It is implemented by io.SectionReader, bytes.Reader, strings.Reader, etc.

Time to finally promote this interface to the standard library and give it a
standard name, blessing it as best practice.

Updates #7263
Updates #14889

Change-Id: Id28c0cafa7d2d37e8887c54708b5daf1b11c83ea
Reviewed-on: https://go-review.googlesource.com/21492
Reviewed-by: Rob Pike <r@golang.org>
This commit is contained in:
Brad Fitzpatrick 2016-04-04 16:54:54 +00:00
parent 34c58065e5
commit 7f39f21c7b

View file

@ -274,6 +274,15 @@ type RuneScanner interface {
UnreadRune() error
}
// ReadAtSizer is the interface that groups the basic ReadAt and Size
// methods, representing a sized data source that supports random
// access by multiple concurrent goroutines.
type ReadAtSizer interface {
ReaderAt
// Size reports the length of the data source in bytes.
Size() int64
}
// stringWriter is the interface that wraps the WriteString method.
type stringWriter interface {
WriteString(s string) (n int, err error)