io.go
func readAtLeast(r io.Reader, buf []byte, min int) error {
	var n int
	var err error
	// Most common case, we get all the bytes in one read
	if n, err = r.Read(buf); n == min {
		return nil
	}
	if err != nil {
		return err
	}
	// Fall back to looping
	var nn int
	for n < min {
		nn, err = r.Read(buf[n:])
		if err != nil {
			if err == io.EOF && n > 0 {
				err = io.ErrUnexpectedEOF
			}
			return err
		}
		n += nn
	}
	return nil
}
func readAtLeast(r io.Reader, buf []byte, min int) error {
	var n int
	var err error
	// Most common case, we get all the bytes in one read
	if n, err = r.Read(buf); n == min {
		return nil
	}
	if err != nil {
		return err
	}
	// Fall back to looping
	var nn int
	for n < min {
		nn, err = r.Read(buf[n:])
		if err != nil {
			if err == io.EOF && n > 0 {
				err = io.ErrUnexpectedEOF
			}
			return err
		}
		n += nn
	}
	return nil
}
func readAtLeast ( r io . Reader , buf [ ] byte , min int ) error { var n int var err error // Most common case, we get all the bytes in one read if n , err = r . Read ( buf ) ; n == min { return nil } if err != nil { return err } // Fall back to looping var nn int for n < min { nn , err = r . Read ( buf [ n : ] ) if err != nil { if err == io . EOF && n > 0 { err = io . ErrUnexpectedEOF } return err } n += nn } return nil }
// readAtLeast is an optimized version of io.ReadAtLeast,
// which omits some checks that don't need to be performed
// when called from Read() in this package.
readAtLeast is an optimized version of io . ReadAtLeast which omits some checks that don t need to be performed when called from Read () in this package .