var ErrLimit … type Limiter … type Reader … // NewReader restricts all Read operations on r to limit bytes per second. func NewReader(r io.Reader, limit int64) *Reader { … } // Read reads up to len(p) bytes into p without exceeding the current transfer // rate limit. It returns (0, nil) immediately if r is non-blocking and no new // bytes can be read at this time. func (r *Reader) Read(p []byte) (n int, err error) { … } // SetLimit changes the transfer rate limit to new bytes per second and returns // the previous setting. func (r *Reader) SetLimit(new int64) (old int64) { … } // SetBlocking changes the blocking behavior and returns the previous setting. A // Read call on a non-blocking reader returns immediately if no additional bytes // may be read at this time due to the rate limit. func (r *Reader) SetBlocking(new bool) (old bool) { … } // Close closes the underlying reader if it implements the io.Closer interface. func (r *Reader) Close() error { … } type Writer … // NewWriter restricts all Write operations on w to limit bytes per second. The // transfer rate and the default blocking behavior (true) can be changed // directly on the returned *Writer. func NewWriter(w io.Writer, limit int64) *Writer { … } // Write writes len(p) bytes from p to the underlying data stream without // exceeding the current transfer rate limit. It returns (n, ErrLimit) if w is // non-blocking and no additional bytes can be written at this time. func (w *Writer) Write(p []byte) (n int, err error) { … } // SetLimit changes the transfer rate limit to new bytes per second and returns // the previous setting. func (w *Writer) SetLimit(new int64) (old int64) { … } // SetBlocking changes the blocking behavior and returns the previous setting. A // Write call on a non-blocking writer returns as soon as no additional bytes // may be written at this time due to the rate limit. func (w *Writer) SetBlocking(new bool) (old bool) { … } // Close closes the underlying writer if it implements the io.Closer interface. func (w *Writer) Close() error { … }