package quicvarintimport ()// Reader implements both the io.ByteReader and io.Reader interfaces.typeReaderinterface {io.ByteReaderio.Reader}var _ Reader = &bytes.Reader{}// A Peeker can peek bytes without consuming them.typePeekerinterface {Peek(b []byte) (int, error)}// Peek reads a number in the QUIC varint format without consuming bytes.func ( Peeker) (uint64, error) {var [8]byte// first peek 1 byte to determine the varint lengthif , := .Peek([:1]); != nil {return0, } := 1 << ([0] >> 6) // 1, 2, 4, or 8 bytesif == 1 {returnuint64([0] & 0b00111111), nil }if , := .Peek([:]); != nil {return0, } , , := Parse([:])return , }type byteReader struct {io.Reader}var _ Reader = &byteReader{}// NewReader returns a Reader for r.// If r already implements both io.ByteReader and io.Reader, NewReader returns r.// Otherwise, r is wrapped to add the missing interfaces.func ( io.Reader) Reader {if , := .(Reader); {return }return &byteReader{}}func ( *byteReader) () (byte, error) {var [1]bytevarintvarerrorfor == 0 && == nil { , = .Read([:]) }if == 1 && == io.EOF { = nil }return [0], }// Writer implements both the io.ByteWriter and io.Writer interfaces.typeWriterinterface {io.ByteWriterio.Writer}var _ Writer = &bytes.Buffer{}type byteWriter struct {io.Writer}var _ Writer = &byteWriter{}// NewWriter returns a Writer for w.// If w already implements both io.ByteWriter and io.Writer, NewWriter returns w.// Otherwise, w is wrapped to add the missing interfaces.func ( io.Writer) Writer {if , := .(Writer); {return }return &byteWriter{}}func ( *byteWriter) ( byte) error { , := .Write([]byte{})return}
The pages are generated with Goldsv0.8.4. (GOOS=linux 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 @zigo_101 (reachable from the left QR code) to get the latest news of Golds.