Source File
io.go
Belonging Package
io
package io
import (
)
const (
SeekStart = 0 // seek relative to the origin of the file
SeekCurrent = 1 // seek relative to the current offset
SeekEnd = 2 // seek relative to the end
)
var ErrShortWrite = errors.New("short write")
var errInvalidWrite = errors.New("invalid write result")
var ErrShortBuffer = errors.New("short buffer")
var ErrUnexpectedEOF = errors.New("unexpected EOF")
var ErrNoProgress = errors.New("multiple Read calls return no data or error")
type ReadWriter interface {
Reader
Writer
}
type ReadCloser interface {
Reader
Closer
}
type WriteCloser interface {
Writer
Closer
}
type ReadWriteCloser interface {
Reader
Writer
Closer
}
type ReadSeeker interface {
Reader
Seeker
}
type ReadSeekCloser interface {
Reader
Seeker
Closer
}
type WriteSeeker interface {
Writer
Seeker
}
type ReadWriteSeeker interface {
Reader
Writer
Seeker
}
type ReaderFrom interface {
ReadFrom(r Reader) (n int64, err error)
}
type ByteReader interface {
ReadByte() (byte, error)
}
type ByteScanner interface {
ByteReader
UnreadByte() error
}
type ByteWriter interface {
WriteByte(c byte) error
}
type RuneReader interface {
ReadRune() (r rune, size int, err error)
}
type RuneScanner interface {
RuneReader
UnreadRune() error
}
type StringWriter interface {
WriteString(s string) (n int, err error)
}
func ( Writer, string) ( int, error) {
if , := .(StringWriter); {
return .WriteString()
}
return .Write([]byte())
}
= EOF
}
return
}
if , := .(ReaderFrom); {
return .ReadFrom()
}
if == nil {
:= 32 * 1024
if , := .(*LimitedReader); && int64() > .N {
if .N < 1 {
= 1
} else {
= int(.N)
}
}
= make([]byte, )
}
for {
, := .Read()
if > 0 {
, := .Write([0:])
if < 0 || < {
= 0
if == nil {
= errInvalidWrite
}
}
+= int64()
if != nil {
=
break
}
if != {
= ErrShortWrite
break
}
}
if != nil {
if != EOF {
=
}
break
}
}
return ,
}
func ( Reader, int64) Reader { return &LimitedReader{, } }
func ( ReaderAt, int64, int64) *SectionReader {
return &SectionReader{, , , + }
}
type SectionReader struct {
r ReaderAt
base int64
off int64
limit int64
}
func ( *SectionReader) ( []byte) ( int, error) {
if .off >= .limit {
return 0, EOF
}
if := .limit - .off; int64(len()) > {
= [0:]
}
, = .r.ReadAt(, .off)
.off += int64()
return
}
var errWhence = errors.New("Seek: invalid whence")
var errOffset = errors.New("Seek: invalid offset")
func ( *SectionReader) ( int64, int) (int64, error) {
switch {
default:
return 0, errWhence
case SeekStart:
+= .base
case SeekCurrent:
+= .off
case SeekEnd:
+= .limit
}
if < .base {
return 0, errOffset
}
.off =
return - .base, nil
}
func ( *SectionReader) ( []byte, int64) ( int, error) {
if < 0 || >= .limit-.base {
return 0, EOF
}
+= .base
if := .limit - ; int64(len()) > {
= [0:]
, = .r.ReadAt(, )
if == nil {
= EOF
}
return ,
}
return .r.ReadAt(, )
}
func ( *SectionReader) () int64 { return .limit - .base }
var _ ReaderFrom = discard{}
func (discard) ( []byte) (int, error) {
return len(), nil
}
func (discard) ( string) (int, error) {
return len(), nil
}
var blackHolePool = sync.Pool{
New: func() interface{} {
:= make([]byte, 8192)
return &
},
}
func (discard) ( Reader) ( int64, error) {
:= blackHolePool.Get().(*[]byte)
:= 0
for {
, = .Read(*)
+= int64()
if != nil {
blackHolePool.Put()
if == EOF {
return , nil
}
return
}
}
}
![]() |
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. |