gob

Imports

Imports #

"encoding"
"errors"
"fmt"
"maps"
"os"
"reflect"
"sync"
"sync/atomic"
"unicode"
"unicode/utf8"
"encoding"
"errors"
"internal/saferio"
"io"
"math"
"math/bits"
"reflect"
"reflect"
"encoding"
"encoding/binary"
"math"
"math/bits"
"reflect"
"sync"
"fmt"
"bytes"
"fmt"
"io"
"os"
"strings"
"sync"
"math"
"reflect"
"bufio"
"errors"
"internal/saferio"
"io"
"reflect"
"sync"
"errors"
"io"
"reflect"
"sync"

Constants & Variables

binaryMarshalerInterfaceType var #

var binaryMarshalerInterfaceType = *ast.CallExpr

binaryUnmarshalerInterfaceType var #

var binaryUnmarshalerInterfaceType = *ast.CallExpr

blanks var #

var blanks = *ast.CallExpr

builtinIdToTypeSlice var #

var builtinIdToTypeSlice [firstUserId]gobType

concreteTypeToName var #

var concreteTypeToName sync.Map

debugFunc var #

If debug.go is compiled into the program, debugFunc prints a human-readable representation of the gob data read from r by calling that file's Debug function. Otherwise it is nil.

var debugFunc func(io.Reader)

decArrayHelper var #

var decArrayHelper = map[reflect.Kind]decHelper{...}

decIgnoreOpMap var #

Indexed by gob types. tComplex will be added during type.init().

var decIgnoreOpMap = map[typeId]decOp{...}

decOpTable var #

Index by Go types.

var decOpTable = [...]decOp{...}

decSliceHelper var #

var decSliceHelper = map[reflect.Kind]decHelper{...}

dumpBytes var #

var dumpBytes = false

empty var #

var empty = *ast.CallExpr

emptyStructType var #

var emptyStructType = *ast.CallExpr

encArrayHelper var #

var encArrayHelper = map[reflect.Kind]encHelper{...}

encBufferPool var #

var encBufferPool = sync.Pool{...}

encOpTable var #

var encOpTable = [...]encOp{...}

encSliceHelper var #

var encSliceHelper = map[reflect.Kind]encHelper{...}

errBadCount var #

var errBadCount = *ast.CallExpr

errBadType var #

var errBadType = *ast.CallExpr

errBadUint var #

var errBadUint = *ast.CallExpr

errRange var #

var errRange = *ast.CallExpr

firstUserId const #

const firstUserId = 64

gobDecoderInterfaceType var #

var gobDecoderInterfaceType = *ast.CallExpr

gobEncoderInterfaceType var #

var gobEncoderInterfaceType = *ast.CallExpr

idToTypeSlice var #

var idToTypeSlice = *ast.CallExpr

intBits const #

const intBits = *ast.BinaryExpr

maxIgnoreNestingDepth var #

var maxIgnoreNestingDepth = 10000

maxLength const #

Before we encode a message, we reserve space at the head of the buffer in which to encode its length. This means we can use the buffer to assemble the message without another allocation.

const maxLength = 9

nameToConcreteType var #

var nameToConcreteType sync.Map

noValue var #

var noValue reflect.Value

singletonField const #

const singletonField = 0

spaceForLength var #

var spaceForLength = *ast.CallExpr

tBool var #

Primordial types, needed during initialization. Always passed as pointers so the interface{} type goes through without losing its interfaceness.

var tBool = *ast.CallExpr

tBytes var #

var tBytes = *ast.CallExpr

tComplex var #

var tComplex = *ast.CallExpr

tFloat var #

var tFloat = *ast.CallExpr

tInt var #

var tInt = *ast.CallExpr

tInterface var #

var tInterface = *ast.CallExpr

tReserved1 var #

var tReserved1 = *ast.CallExpr

tReserved2 var #

var tReserved2 = *ast.CallExpr

tReserved3 var #

var tReserved3 = *ast.CallExpr

tReserved4 var #

var tReserved4 = *ast.CallExpr

tReserved5 var #

var tReserved5 = *ast.CallExpr

tReserved6 var #

var tReserved6 = *ast.CallExpr

tReserved7 var #

Reserve some Ids for compatible expansion

var tReserved7 = *ast.CallExpr

tString var #

var tString = *ast.CallExpr

tUint var #

var tUint = *ast.CallExpr

tWireType var #

Predefined because it's needed by the Decoder

var tWireType = *ast.CallExpr.id

tabs var #

var tabs = *ast.CallExpr

textMarshalerInterfaceType var #

var textMarshalerInterfaceType = *ast.CallExpr

textUnmarshalerInterfaceType var #

var textUnmarshalerInterfaceType = *ast.CallExpr

tooBig const #

tooBig provides a sanity check for sizes; used in several places. Upper limit of is 1GB on 32-bit systems, 8GB on 64-bit, allowing room to grow a little without overflow.

const tooBig = *ast.BinaryExpr

typeInfoMap var #

typeInfoMap is an atomic pointer to map[reflect.Type]*typeInfo. It's updated copy-on-write. Readers just do an atomic load to get the current version of the map. Writers make a full copy of the map and atomically update the pointer to point to the new map. Under heavy read contention, this is significantly faster than a map protected by a mutex.

var typeInfoMap atomic.Value

typeInfoMapInit var #

typeInfoMapInit is used instead of typeInfoMap during init time, as types are registered sequentially during init and we can save the overhead of making map copies. It is saved to typeInfoMap and set to nil before init finishes.

var typeInfoMapInit = *ast.CallExpr

typeLock var #

var typeLock sync.Mutex

types var #

var types = *ast.CallExpr

uint64Size const #

const uint64Size = 8

uintptrBits const #

const uintptrBits = *ast.BinaryExpr

userTypeCache var #

var userTypeCache sync.Map

wireTypeType var #

var wireTypeType = *ast.CallExpr

wireTypeUserInfo var #

var wireTypeUserInfo *userTypeInfo

xBinary const #

externalEncoding bits

const xBinary

xGob const #

externalEncoding bits

const xGob = *ast.BinaryExpr

xText const #

externalEncoding bits

const xText

Type Aliases

decHelper type #

type decHelper func(state *decoderState, v reflect.Value, length int, ovfl error) bool

decOp type #

decOp is the signature of a decoding operator for a given type.

type decOp func(i *decInstr, state *decoderState, v reflect.Value)

encHelper type #

type encHelper func(state *encoderState, v reflect.Value) bool

encOp type #

encOp is the signature of an encoding operator for a given type.

type encOp func(i *encInstr, state *encoderState, v reflect.Value)

tab type #

tab indents itself when printed.

type tab int

typeId type #

A typeId represents a gob Type as an integer that can be passed on the wire. Internally, typeIds are used as keys to a map to recover the underlying type info.

type typeId int32

Interfaces

GobDecoder interface #

GobDecoder is the interface describing data that provides its own routine for decoding transmitted values sent by a GobEncoder.

type GobDecoder interface {
GobDecode([]byte) error
}

GobEncoder interface #

GobEncoder is the interface describing data that provides its own representation for encoding values for transmission to a GobDecoder. A type that implements GobEncoder and GobDecoder has complete control over the representation of its data and may therefore contain things such as private fields, channels, and functions, which are not usually transmissible in gob streams. Note: Since gobs can be stored permanently, it is good design to guarantee the encoding used by a GobEncoder is stable as the software evolves. For instance, it might make sense for GobEncode to include a version number in the encoding.

type GobEncoder interface {
GobEncode() ([]byte, error)
}

gobType interface #

type gobType interface {
id() typeId
setId(id typeId)
name() string
string() string
safeString(seen map[typeId]bool) string
}

Structs

CommonType struct #

CommonType holds elements of all types. It is a historical artifact, kept for binary compatibility and exported only for the benefit of the package's encoding of type descriptors. It is not intended for direct use by clients.

type CommonType struct {
Name string
Id typeId
}

Decoder struct #

A Decoder manages the receipt of type and data information read from the remote side of a connection. It is safe for concurrent use by multiple goroutines. The Decoder does only basic sanity checking on decoded input sizes, and its limits are not configurable. Take caution when decoding gob data from untrusted sources.

type Decoder struct {
mutex sync.Mutex
r io.Reader
buf decBuffer
wireType map[typeId]*wireType
decoderCache map[reflect.Type]map[typeId]**decEngine
ignorerCache map[typeId]**decEngine
freeList *decoderState
countBuf []byte
err error
ignoreDepth int
}

Encoder struct #

An Encoder manages the transmission of type and data information to the other side of a connection. It is safe for concurrent use by multiple goroutines.

type Encoder struct {
mutex sync.Mutex
w []io.Writer
sent map[reflect.Type]typeId
countState *encoderState
freeList *encoderState
byteBuf encBuffer
err error
}

arrayType struct #

Array type

type arrayType struct {
CommonType
Elem typeId
Len int
}

debugger struct #

type debugger struct {
mutex sync.Mutex
remain int
remainingKnown bool
r *peekReader
wireType map[typeId]*wireType
tmp []byte
}

decBuffer struct #

decBuffer is an extremely simple, fast implementation of a read-only byte buffer. It is initialized by calling Size and then copying the data into the slice returned by Bytes().

type decBuffer struct {
data []byte
offset int
}

decEngine struct #

The encoder engine is an array of instructions indexed by field number of the incoming decoder. It is executed with random access according to field number.

type decEngine struct {
instr []decInstr
numInstr int
}

decInstr struct #

The 'instructions' of the decoding machine

type decInstr struct {
op decOp
field int
index []int
ovfl error
}

decoderState struct #

decoderState is the execution state of an instance of the decoder. A new state is created for nested objects.

type decoderState struct {
dec *Decoder
b *decBuffer
fieldnum int
next *decoderState
}

emptyStruct struct #

emptyStruct is the type we compile into when ignoring a struct value.

type emptyStruct struct {

}

encBuffer struct #

encBuffer is an extremely simple, fast implementation of a write-only byte buffer. It never returns a non-nil error, but Write returns an error value so it matches io.Writer.

type encBuffer struct {
data []byte
scratch [64]byte
}

encEngine struct #

encEngine an array of instructions indexed by field number of the encoding data, typically a struct. It is executed top to bottom, walking the struct.

type encEngine struct {
instr []encInstr
}

encInstr struct #

The 'instructions' of the encoding machine

type encInstr struct {
op encOp
field int
index []int
indir int
}

encoderState struct #

encoderState is the global execution state of an instance of the encoder. Field numbers are delta encoded and always increase. The field number is initialized to -1 so 0 comes out as delta(1). A delta of 0 terminates the structure.

type encoderState struct {
enc *Encoder
b *encBuffer
sendZero bool
fieldnum int
buf [*ast.BinaryExpr]byte
next *encoderState
}

fieldType struct #

Struct type

type fieldType struct {
Name string
Id typeId
}

gobEncoderType struct #

GobEncoder type (something that implements the GobEncoder interface)

type gobEncoderType struct {
CommonType
}

gobError struct #

A gobError is used to distinguish errors (panics) generated in this package.

type gobError struct {
err error
}

mapType struct #

Map type

type mapType struct {
CommonType
Key typeId
Elem typeId
}

peekReader struct #

A peekReader wraps an io.Reader, allowing one to peek ahead to see what's coming without stealing the data from the client of the Reader.

type peekReader struct {
r io.Reader
data []byte
}

sliceType struct #

Slice type

type sliceType struct {
CommonType
Elem typeId
}

structType struct #

type structType struct {
CommonType
Field []fieldType
}

typeInfo struct #

type typeInfo struct {
id typeId
encInit sync.Mutex
encoder *ast.IndexExpr
wire wireType
}

userTypeInfo struct #

userTypeInfo stores the information associated with a type the user has handed to the package. It's computed once and stored in a map keyed by reflection type.

type userTypeInfo struct {
user reflect.Type
base reflect.Type
indir int
externalEnc int
externalDec int
encIndir int8
decIndir int8
}

wireType struct #

Representation of the information we send and receive about this type. Each value we send is preceded by its type definition: an encoded int. However, the very first time we send the value, we first send the pair (-id, wireType). For bootstrapping purposes, we assume that the recipient knows how to decode a wireType; it is exactly the wireType struct here, interpreted using the gob rules for sending a structure, except that we assume the ids for wireType and structType etc. are known. The relevant pieces are built in encode.go's init() function. To maintain binary compatibility, if you extend this type, always put the new fields last.

type wireType struct {
ArrayT *arrayType
SliceT *sliceType
StructT *structType
MapT *mapType
GobEncoderT *gobEncoderType
BinaryMarshalerT *gobEncoderType
TextMarshalerT *gobEncoderType
}

Functions

Bytes method #

func (d *decBuffer) Bytes() []byte

Bytes method #

func (e *encBuffer) Bytes() []byte

Debug function #

Debug prints a human-readable representation of the gob data read from r. It is a no-op unless debugging was enabled when the package was built.

func Debug(r io.Reader)

Decode method #

Decode reads the next value from the input stream and stores it in the data represented by the empty interface value. If e is nil, the value will be discarded. Otherwise, the value underlying e must be a pointer to the correct type for the next data item received. If the input is at EOF, Decode returns [io.EOF] and does not modify e.

func (dec *Decoder) Decode(e any) error

DecodeValue method #

DecodeValue reads the next value from the input stream. If v is the zero reflect.Value (v.Kind() == Invalid), DecodeValue discards the value. Otherwise, it stores the value into v. In that case, v must represent a non-nil pointer to data or be an assignable reflect.Value (v.CanSet()) If the input is at EOF, DecodeValue returns [io.EOF] and does not modify v.

func (dec *Decoder) DecodeValue(v reflect.Value) error

Drop method #

func (d *decBuffer) Drop(n int)

Encode method #

Encode transmits the data item represented by the empty interface value, guaranteeing that all necessary type information has been transmitted first. Passing a nil pointer to Encoder will panic, as they cannot be transmitted by gob.

func (enc *Encoder) Encode(e any) error

EncodeValue method #

EncodeValue transmits the data item represented by the reflection value, guaranteeing that all necessary type information has been transmitted first. Passing a nil pointer to EncodeValue will panic, as they cannot be transmitted by gob.

func (enc *Encoder) EncodeValue(value reflect.Value) error

Len method #

func (e *encBuffer) Len() int

Len method #

func (d *decBuffer) Len() int

NewDecoder function #

NewDecoder returns a new decoder that reads from the [io.Reader]. If r does not also implement [io.ByteReader], it will be wrapped in a [bufio.Reader].

func NewDecoder(r io.Reader) *Decoder

NewEncoder function #

NewEncoder returns a new encoder that will transmit on the [io.Writer].

func NewEncoder(w io.Writer) *Encoder

Read method #

Read is the usual method. It will first take data that has been read ahead.

func (p *peekReader) Read(b []byte) (n int, err error)

Read method #

func (d *decBuffer) Read(p []byte) (int, error)

ReadByte method #

func (d *decBuffer) ReadByte() (byte, error)

Register function #

Register records a type, identified by a value for that type, under its internal type name. That name will identify the concrete type of a value sent or received as an interface variable. Only types that will be transferred as implementations of interface values need to be registered. Expecting to be used only during initialization, it panics if the mapping between types and names is not a bijection.

func Register(value any)

RegisterName function #

RegisterName is like [Register] but uses the provided name rather than the type's default.

func RegisterName(name string, value any)

Reset method #

func (e *encBuffer) Reset()

Reset method #

func (d *decBuffer) Reset()

SetBytes method #

SetBytes sets the buffer to the bytes, discarding any existing data.

func (d *decBuffer) SetBytes(data []byte)

String method #

func (t tab) String() string

Write method #

func (e *encBuffer) Write(p []byte) (int, error)

WriteString method #

func (e *encBuffer) WriteString(s string)

allocValue function #

Gob depends on being able to take the address of zeroed Values it creates, so use this wrapper instead of the standard reflect.Zero. Each call allocates once.

func allocValue(t reflect.Type) reflect.Value

arrayValue method #

ArrayValue: uint(n) FieldValue*n

func (deb *debugger) arrayValue(indent tab, wire *wireType)

bootstrapType function #

used for building the basic types; called only from init(). the incoming interface always refers to a pointer.

func bootstrapType(name string, e any) typeId

buildEncEngine function #

func buildEncEngine(info *typeInfo, ut *userTypeInfo, building map[*typeInfo]bool) *encEngine

buildTypeInfo function #

buildTypeInfo constructs the type information for the type and stores it in the type info map.

func buildTypeInfo(ut *userTypeInfo, rt reflect.Type) (*typeInfo, error)

builtinIdToType function #

func builtinIdToType(id typeId) gobType

catchError function #

catchError is meant to be used as a deferred function to turn a panic(gobError) into a plain error. It overwrites the error return of the function that deferred its call.

func catchError(err *error)

checkId function #

func checkId(want typeId, got typeId)

common method #

common returns the CommonType at the input point.

func (deb *debugger) common() CommonType

compatibleType method #

compatibleType asks: Are these two gob Types compatible? Answers the question for basic types, arrays, maps and slices, plus GobEncoder/Decoder pairs. Structs are considered ok; fields will be checked later.

func (dec *Decoder) compatibleType(fr reflect.Type, fw typeId, inProgress map[reflect.Type]typeId) bool

compileDec method #

compileDec compiles the decoder engine for a value. If the value is not a struct, it calls out to compileSingle.

func (dec *Decoder) compileDec(remoteId typeId, ut *userTypeInfo) (engine *decEngine, err error)

compileEnc function #

compileEnc returns the engine to compile the type.

func compileEnc(ut *userTypeInfo, building map[*typeInfo]bool) *encEngine

compileIgnoreSingle method #

compileIgnoreSingle compiles the decoder engine for a non-struct top-level value that will be discarded.

func (dec *Decoder) compileIgnoreSingle(remoteId typeId) *decEngine

compileSingle method #

compileSingle compiles the decoder engine for a non-struct top-level value, including GobDecoders.

func (dec *Decoder) compileSingle(remoteId typeId, ut *userTypeInfo) (engine *decEngine, err error)

consumed method #

note that we've consumed some bytes

func (deb *debugger) consumed(n int)

debug function #

debug implements Debug, but catches panics and returns them as errors to be printed by Debug.

func debug(r io.Reader) (err error)

decAlloc function #

decAlloc takes a value and returns a settable value that can be assigned to. If the value is a pointer, decAlloc guarantees it points to storage. The callers to the individual decoders are expected to have used decAlloc. The individual decoders don't need it.

func decAlloc(v reflect.Value) reflect.Value

decBool function #

decBool decodes a uint and stores it as a boolean in value.

func decBool(i *decInstr, state *decoderState, value reflect.Value)

decBoolArray function #

func decBoolArray(state *decoderState, v reflect.Value, length int, ovfl error) bool

decBoolSlice function #

func decBoolSlice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decComplex128 function #

decComplex128 decodes a pair of unsigned integers, treats them as a pair of floating point numbers, and stores them as a complex128 in value. The real part comes first.

func decComplex128(i *decInstr, state *decoderState, value reflect.Value)

decComplex128Array function #

func decComplex128Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decComplex128Slice function #

func decComplex128Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decComplex64 function #

decComplex64 decodes a pair of unsigned integers, treats them as a pair of floating point numbers, and stores them as a complex64 in value. The real part comes first.

func decComplex64(i *decInstr, state *decoderState, value reflect.Value)

decComplex64Array function #

func decComplex64Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decComplex64Slice function #

func decComplex64Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decFloat32 function #

decFloat32 decodes an unsigned integer, treats it as a 32-bit floating-point number, and stores it in value.

func decFloat32(i *decInstr, state *decoderState, value reflect.Value)

decFloat32Array function #

func decFloat32Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decFloat32Slice function #

func decFloat32Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decFloat64 function #

decFloat64 decodes an unsigned integer, treats it as a 64-bit floating-point number, and stores it in value.

func decFloat64(i *decInstr, state *decoderState, value reflect.Value)

decFloat64Array function #

func decFloat64Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decFloat64Slice function #

func decFloat64Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decIgnoreOpFor method #

decIgnoreOpFor returns the decoding op for a field that has no destination.

func (dec *Decoder) decIgnoreOpFor(wireId typeId, inProgress map[typeId]*decOp) *decOp

decInt16 function #

decInt16 decodes an integer and stores it as an int16 in value.

func decInt16(i *decInstr, state *decoderState, value reflect.Value)

decInt16Array function #

func decInt16Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt16Slice function #

func decInt16Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt32 function #

decInt32 decodes an integer and stores it as an int32 in value.

func decInt32(i *decInstr, state *decoderState, value reflect.Value)

decInt32Array function #

func decInt32Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt32Slice function #

func decInt32Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt64 function #

decInt64 decodes an integer and stores it as an int64 in value.

func decInt64(i *decInstr, state *decoderState, value reflect.Value)

decInt64Array function #

func decInt64Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt64Slice function #

func decInt64Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt8 function #

decInt8 decodes an integer and stores it as an int8 in value.

func decInt8(i *decInstr, state *decoderState, value reflect.Value)

decInt8Array function #

func decInt8Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decInt8Slice function #

func decInt8Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decIntArray function #

func decIntArray(state *decoderState, v reflect.Value, length int, ovfl error) bool

decIntSlice function #

func decIntSlice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decOpFor method #

decOpFor returns the decoding op for the base type under rt and the indirection count to reach it.

func (dec *Decoder) decOpFor(wireId typeId, rt reflect.Type, name string, inProgress map[reflect.Type]*decOp) *decOp

decString function #

decString decodes byte array and stores in value a string header describing the data. Strings are encoded as an unsigned count followed by the raw bytes.

func decString(i *decInstr, state *decoderState, value reflect.Value)

decStringArray function #

func decStringArray(state *decoderState, v reflect.Value, length int, ovfl error) bool

decStringSlice function #

func decStringSlice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint16 function #

decUint16 decodes an unsigned integer and stores it as a uint16 in value.

func decUint16(i *decInstr, state *decoderState, value reflect.Value)

decUint16Array function #

func decUint16Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint16Slice function #

func decUint16Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint32 function #

decUint32 decodes an unsigned integer and stores it as a uint32 in value.

func decUint32(i *decInstr, state *decoderState, value reflect.Value)

decUint32Array function #

func decUint32Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint32Slice function #

func decUint32Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint64 function #

decUint64 decodes an unsigned integer and stores it as a uint64 in value.

func decUint64(i *decInstr, state *decoderState, value reflect.Value)

decUint64Array function #

func decUint64Array(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint64Slice function #

func decUint64Slice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUint8 function #

decUint8 decodes an unsigned integer and stores it as a uint8 in value.

func decUint8(i *decInstr, state *decoderState, value reflect.Value)

decUint8Slice function #

decUint8Slice decodes a byte slice and stores in value a slice header describing the data. uint8 slices are encoded as an unsigned count followed by the raw bytes.

func decUint8Slice(i *decInstr, state *decoderState, value reflect.Value)

decUintArray function #

func decUintArray(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUintSlice function #

func decUintSlice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUintptrArray function #

func decUintptrArray(state *decoderState, v reflect.Value, length int, ovfl error) bool

decUintptrSlice function #

func decUintptrSlice(state *decoderState, v reflect.Value, length int, ovfl error) bool

decodeArray method #

decodeArray decodes an array and stores it in value. The length is an unsigned integer preceding the elements. Even though the length is redundant (it's part of the type), it's a useful check and is included in the encoding.

func (dec *Decoder) decodeArray(state *decoderState, value reflect.Value, elemOp decOp, length int, ovfl error, helper decHelper)

decodeArrayHelper method #

decodeArrayHelper does the work for decoding arrays and slices.

func (dec *Decoder) decodeArrayHelper(state *decoderState, value reflect.Value, elemOp decOp, length int, ovfl error, helper decHelper)

decodeGobDecoder method #

decodeGobDecoder decodes something implementing the GobDecoder interface. The data is encoded as a byte slice.

func (dec *Decoder) decodeGobDecoder(ut *userTypeInfo, state *decoderState, value reflect.Value)

decodeIgnoredValue method #

decodeIgnoredValue decodes the data stream representing a value of the specified type and discards it.

func (dec *Decoder) decodeIgnoredValue(wireId typeId)

decodeInt method #

decodeInt reads an encoded signed integer from state.r. Does not check for overflow.

func (state *decoderState) decodeInt() int64

decodeInterface method #

decodeInterface decodes an interface value and stores it in value. Interfaces are encoded as the name of a concrete type followed by a value. If the name is empty, the value is nil and no value is sent.

func (dec *Decoder) decodeInterface(ityp reflect.Type, state *decoderState, value reflect.Value)

decodeIntoValue function #

decodeIntoValue is a helper for map decoding.

func decodeIntoValue(state *decoderState, op decOp, isPtr bool, value reflect.Value, instr *decInstr) reflect.Value

decodeMap method #

decodeMap decodes a map and stores it in value. Maps are encoded as a length followed by key:value pairs. Because the internals of maps are not visible to us, we must use reflection rather than pointer magic.

func (dec *Decoder) decodeMap(mtyp reflect.Type, state *decoderState, value reflect.Value, keyOp decOp, elemOp decOp, ovfl error)

decodeSingle method #

decodeSingle decodes a top-level value that is not a struct and stores it in value. Such values are preceded by a zero, making them have the memory layout of a struct field (although with an illegal field number).

func (dec *Decoder) decodeSingle(engine *decEngine, value reflect.Value)

decodeSlice method #

decodeSlice decodes a slice and stores it in value. Slices are encoded as an unsigned length followed by the elements.

func (dec *Decoder) decodeSlice(state *decoderState, value reflect.Value, elemOp decOp, ovfl error, helper decHelper)

decodeStruct method #

decodeStruct decodes a top-level struct and stores it in value. Indir is for the value, not the type. At the time of the call it may differ from ut.indir, which was computed when the engine was built. This state cannot arise for decodeSingle, which is called directly from the user's value, not from the innards of an engine.

func (dec *Decoder) decodeStruct(engine *decEngine, value reflect.Value)

decodeTypeSequence method #

decodeTypeSequence parses: TypeSequence (TypeDefinition DelimitedTypeDefinition*)? and returns the type id of the next value. It returns -1 at EOF. Upon return, the remainder of dec.buf is the value to be decoded. If this is an interface value, it can be ignored by resetting that buffer.

func (dec *Decoder) decodeTypeSequence(isInterface bool) typeId

decodeUint method #

decodeUint reads an encoded unsigned integer from state.r. Does not check for overflow.

func (state *decoderState) decodeUint() (x uint64)

decodeUintReader function #

decodeUintReader reads an encoded unsigned integer from an io.Reader. Used only by the Decoder to read the message length.

func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err error)

decodeValue method #

decodeValue decodes the data stream representing a value and stores it in value.

func (dec *Decoder) decodeValue(wireId typeId, value reflect.Value)

delimitedMessage method #

DelimitedMessage: uint(lengthOfMessage) Message

func (deb *debugger) delimitedMessage(indent tab) bool

delta method #

delta returns the field delta at the input point. The expect argument, if non-negative, identifies what the value should be.

func (deb *debugger) delta(expect int) int

dump method #

dump prints the next nBytes of the input. It arranges to print the output aligned from call to call, to make it easy to see what has been consumed.

func (deb *debugger) dump(format string, args ...any)

encBool function #

encBool encodes the bool referenced by v as an unsigned 0 or 1.

func encBool(i *encInstr, state *encoderState, v reflect.Value)

encBoolArray function #

func encBoolArray(state *encoderState, v reflect.Value) bool

encBoolSlice function #

func encBoolSlice(state *encoderState, v reflect.Value) bool

encComplex function #

encComplex encodes the complex value (complex64 complex128) referenced by v. Complex numbers are just a pair of floating-point numbers, real part first.

func encComplex(i *encInstr, state *encoderState, v reflect.Value)

encComplex128Array function #

func encComplex128Array(state *encoderState, v reflect.Value) bool

encComplex128Slice function #

func encComplex128Slice(state *encoderState, v reflect.Value) bool

encComplex64Array function #

func encComplex64Array(state *encoderState, v reflect.Value) bool

encComplex64Slice function #

func encComplex64Slice(state *encoderState, v reflect.Value) bool

encFloat function #

encFloat encodes the floating point value (float32 float64) referenced by v.

func encFloat(i *encInstr, state *encoderState, v reflect.Value)

encFloat32Array function #

func encFloat32Array(state *encoderState, v reflect.Value) bool

encFloat32Slice function #

func encFloat32Slice(state *encoderState, v reflect.Value) bool

encFloat64Array function #

func encFloat64Array(state *encoderState, v reflect.Value) bool

encFloat64Slice function #

func encFloat64Slice(state *encoderState, v reflect.Value) bool

encIndirect function #

encIndirect dereferences pv indir times and returns the result.

func encIndirect(pv reflect.Value, indir int) reflect.Value

encInt function #

encInt encodes the signed integer (int int8 int16 int32 int64) referenced by v.

func encInt(i *encInstr, state *encoderState, v reflect.Value)

encInt16Array function #

func encInt16Array(state *encoderState, v reflect.Value) bool

encInt16Slice function #

func encInt16Slice(state *encoderState, v reflect.Value) bool

encInt32Array function #

func encInt32Array(state *encoderState, v reflect.Value) bool

encInt32Slice function #

func encInt32Slice(state *encoderState, v reflect.Value) bool

encInt64Array function #

func encInt64Array(state *encoderState, v reflect.Value) bool

encInt64Slice function #

func encInt64Slice(state *encoderState, v reflect.Value) bool

encInt8Array function #

func encInt8Array(state *encoderState, v reflect.Value) bool

encInt8Slice function #

func encInt8Slice(state *encoderState, v reflect.Value) bool

encIntArray function #

func encIntArray(state *encoderState, v reflect.Value) bool

encIntSlice function #

func encIntSlice(state *encoderState, v reflect.Value) bool

encOpFor function #

encOpFor returns (a pointer to) the encoding op for the base type under rt and the indirection count to reach it.

func encOpFor(rt reflect.Type, inProgress map[reflect.Type]*encOp, building map[*typeInfo]bool) (*encOp, int)

encString function #

encString encodes the string referenced by v. Strings are encoded as an unsigned count followed by the raw bytes.

func encString(i *encInstr, state *encoderState, v reflect.Value)

encStringArray function #

func encStringArray(state *encoderState, v reflect.Value) bool

encStringSlice function #

func encStringSlice(state *encoderState, v reflect.Value) bool

encStructTerminator function #

encStructTerminator encodes the end of an encoded struct as delta field number of 0.

func encStructTerminator(i *encInstr, state *encoderState, v reflect.Value)

encUint function #

encUint encodes the unsigned integer (uint uint8 uint16 uint32 uint64 uintptr) referenced by v.

func encUint(i *encInstr, state *encoderState, v reflect.Value)

encUint16Array function #

func encUint16Array(state *encoderState, v reflect.Value) bool

encUint16Slice function #

func encUint16Slice(state *encoderState, v reflect.Value) bool

encUint32Array function #

func encUint32Array(state *encoderState, v reflect.Value) bool

encUint32Slice function #

func encUint32Slice(state *encoderState, v reflect.Value) bool

encUint64Array function #

func encUint64Array(state *encoderState, v reflect.Value) bool

encUint64Slice function #

func encUint64Slice(state *encoderState, v reflect.Value) bool

encUint8Array function #

encUint8Array encodes the byte array referenced by v. Byte arrays are encoded as an unsigned count followed by the raw bytes.

func encUint8Array(i *encInstr, state *encoderState, v reflect.Value)

encUintArray function #

func encUintArray(state *encoderState, v reflect.Value) bool

encUintSlice function #

func encUintSlice(state *encoderState, v reflect.Value) bool

encUintptrArray function #

func encUintptrArray(state *encoderState, v reflect.Value) bool

encUintptrSlice function #

func encUintptrSlice(state *encoderState, v reflect.Value) bool

encode method #

func (enc *Encoder) encode(b *encBuffer, value reflect.Value, ut *userTypeInfo)

encodeArray method #

encodeArray encodes an array.

func (enc *Encoder) encodeArray(b *encBuffer, value reflect.Value, op encOp, elemIndir int, length int, helper encHelper)

encodeGobEncoder method #

encodeGobEncoder encodes a value that implements the GobEncoder interface. The data is sent as a byte array.

func (enc *Encoder) encodeGobEncoder(b *encBuffer, ut *userTypeInfo, v reflect.Value)

encodeInt method #

encodeInt writes an encoded signed integer to state.w. The low bit of the encoding says whether to bit complement the (other bits of the) uint to recover the int.

func (state *encoderState) encodeInt(i int64)

encodeInterface method #

encodeInterface encodes the interface value iv. To send an interface, we send a string identifying the concrete type, followed by the type identifier (which might require defining that type right now), followed by the concrete value. A nil value gets sent as the empty string for the name, followed by no value.

func (enc *Encoder) encodeInterface(b *encBuffer, iv reflect.Value)

encodeMap method #

encodeMap encodes a map as unsigned count followed by key:value pairs.

func (enc *Encoder) encodeMap(b *encBuffer, mv reflect.Value, keyOp encOp, elemOp encOp, keyIndir int, elemIndir int)

encodeReflectValue function #

encodeReflectValue is a helper for maps. It encodes the value v.

func encodeReflectValue(state *encoderState, v reflect.Value, op encOp, indir int)

encodeSingle method #

encodeSingle encodes a single top-level non-struct value.

func (enc *Encoder) encodeSingle(b *encBuffer, engine *encEngine, value reflect.Value)

encodeStruct method #

encodeStruct encodes a single struct value.

func (enc *Encoder) encodeStruct(b *encBuffer, engine *encEngine, value reflect.Value)

encodeUint method #

encodeUint writes an encoded unsigned integer to state.b.

func (state *encoderState) encodeUint(x uint64)

error_ function #

error_ wraps the argument error and uses it as the argument to panic.

func error_(err error)

errorf function #

errorf is like error_ but takes Printf-style arguments to construct an error. It always prefixes the message with "gob: ".

func errorf(format string, args ...any)

fieldValue method #

fieldValue prints a value of any type, such as a struct field. FieldValue: builtinValue | ArrayValue | MapValue | SliceValue | StructValue | InterfaceValue

func (deb *debugger) fieldValue(indent tab, id typeId)

float32FromBits function #

float32FromBits decodes an unsigned integer, treats it as a 32-bit floating-point number, and returns it. It's a helper function for float32 and complex64. It returns a float64 because that's what reflection needs, but its return value is known to be accurately representable in a float32.

func float32FromBits(u uint64, ovfl error) float64

float64FromBits function #

Floating-point numbers are transmitted as uint64s holding the bits of the underlying representation. They are sent byte-reversed, with the exponent end coming out first, so integer floating point numbers (for example) transmit more compactly. This routine does the unswizzling.

func float64FromBits(u uint64) float64

floatBits function #

floatBits returns a uint64 holding the bits of a floating-point number. Floating-point numbers are transmitted as uint64s holding the bits of the underlying representation. They are sent byte-reversed, with the exponent end coming out first, so integer floating point numbers (for example) transmit more compactly. This routine does the swizzling.

func floatBits(f float64) uint64

freeDecoderState method #

func (dec *Decoder) freeDecoderState(d *decoderState)

freeEncoderState method #

func (enc *Encoder) freeEncoderState(e *encoderState)

getBaseType function #

getBaseType returns the Gob type describing the given reflect.Type's base type. typeLock must be held.

func getBaseType(name string, rt reflect.Type) (gobType, error)

getDecEnginePtr method #

getDecEnginePtr returns the engine for the specified type.

func (dec *Decoder) getDecEnginePtr(remoteId typeId, ut *userTypeInfo) (enginePtr **decEngine, err error)

getEncEngine function #

getEncEngine returns the engine to compile the type.

func getEncEngine(ut *userTypeInfo, building map[*typeInfo]bool) *encEngine

getIgnoreEnginePtr method #

getIgnoreEnginePtr returns the engine for the specified type when the value is to be discarded.

func (dec *Decoder) getIgnoreEnginePtr(wireId typeId) (enginePtr **decEngine, err error)

getLength method #

getLength decodes the next uint and makes sure it is a possible size for a data item that follows, which means it must fit in a non-negative int and fit in the buffer.

func (state *decoderState) getLength() (int, bool)

getType function #

getType returns the Gob type describing the given reflect.Type. Should be called only when handling GobEncoders/Decoders, which may be pointers. All other types are handled through the base type, never a pointer. typeLock must be held.

func getType(name string, ut *userTypeInfo, rt reflect.Type) (gobType, error)

getTypeInfo function #

func getTypeInfo(ut *userTypeInfo) (*typeInfo, error)

gobDecodeOpFor method #

gobDecodeOpFor returns the op for a type that is known to implement GobDecoder.

func (dec *Decoder) gobDecodeOpFor(ut *userTypeInfo) *decOp

gobEncodeOpFor function #

gobEncodeOpFor returns the op for a type that is known to implement GobEncoder.

func gobEncodeOpFor(ut *userTypeInfo) (*encOp, int)

gobEncoderValue method #

GobEncoderValue: uint(n) byte*n

func (deb *debugger) gobEncoderValue(indent tab, id typeId)

gobStream method #

GobStream: DelimitedMessage* (until EOF)

func (deb *debugger) gobStream()

gobType method #

func (t typeId) gobType() gobType

growSlice function #

growSlice is called for a slice that we only partially allocated, to grow it up to length.

func growSlice(v reflect.Value, ps *[]E, length int)

id method #

func (t *CommonType) id() typeId

idToType function #

func idToType(id typeId) gobType

ignoreArray method #

ignoreArray discards the data for an array value with no destination.

func (dec *Decoder) ignoreArray(state *decoderState, elemOp decOp, length int)

ignoreArrayHelper method #

ignoreArrayHelper does the work for discarding arrays and slices.

func (dec *Decoder) ignoreArrayHelper(state *decoderState, elemOp decOp, length int)

ignoreGobDecoder method #

ignoreGobDecoder discards the data for a GobDecoder value with no destination.

func (dec *Decoder) ignoreGobDecoder(state *decoderState)

ignoreInterface method #

ignoreInterface discards the data for an interface value with no destination.

func (dec *Decoder) ignoreInterface(state *decoderState)

ignoreMap method #

ignoreMap discards the data for a map value with no destination.

func (dec *Decoder) ignoreMap(state *decoderState, keyOp decOp, elemOp decOp)

ignoreSingle method #

ignoreSingle discards the data for a top-level non-struct value with no destination. It's used when calling Decode with a nil value.

func (dec *Decoder) ignoreSingle(engine *decEngine)

ignoreSlice method #

ignoreSlice skips over the data for a slice value with no destination.

func (dec *Decoder) ignoreSlice(state *decoderState, elemOp decOp)

ignoreStruct method #

ignoreStruct discards the data for a struct with no destination.

func (dec *Decoder) ignoreStruct(engine *decEngine)

ignoreTwoUints function #

ignoreTwoUints discards a uint value with no destination. It's used to skip complex values.

func ignoreTwoUints(i *decInstr, state *decoderState, v reflect.Value)

ignoreUint function #

ignoreUint discards a uint value with no destination.

func ignoreUint(i *decInstr, state *decoderState, v reflect.Value)

ignoreUint8Array function #

ignoreUint8Array skips over the data for a byte slice value with no destination.

func ignoreUint8Array(i *decInstr, state *decoderState, value reflect.Value)

implementsInterface function #

implementsInterface reports whether the type implements the gobEncoder/gobDecoder interface. It also returns the number of indirections required to get to the implementation.

func implementsInterface(typ reflect.Type, gobEncDecType reflect.Type) (success bool, indir int8)

init method #

func (a *arrayType) init(elem gobType, len int)

init function #

Init installs the debugging facility. If this file is not compiled in the package, the tests in codec_test.go are no-ops.

func init()

init function #

func init()

init method #

func (s *sliceType) init(elem gobType)

init method #

func (m *mapType) init(key gobType, elem gobType)

init function #

func init()

init function #

func init()

int method #

int returns the signed int at the input point, as an int (not int64).

func (deb *debugger) int() int

int64 method #

int64 decodes and returns the next integer, which must be present. Don't call this if you could be at EOF.

func (deb *debugger) int64() int64

interfaceValue method #

InterfaceValue: NilInterfaceValue | NonNilInterfaceValue

func (deb *debugger) interfaceValue(indent tab)

isExported function #

isExported reports whether this is an exported - upper case - name.

func isExported(name string) bool

isSent function #

isSent reports whether this struct field is to be transmitted. It will be transmitted only if it is exported and not a chan or func field or pointer to chan or func.

func isSent(field *reflect.StructField) bool

loadBlock method #

loadBlock preps us to read a message of the length specified next in the input. It returns the length of the block. The argument tells whether an EOF is acceptable now. If it is and one is found, the return value is negative.

func (deb *debugger) loadBlock(eofOK bool) int

lookupTypeInfo function #

func lookupTypeInfo(rt reflect.Type) *typeInfo

mapValue method #

MapValue: uint(n) (FieldValue FieldValue)*n [n (key, value) pairs]

func (deb *debugger) mapValue(indent tab, wire *wireType)

message method #

Message: TypeSequence TypedValue TypeSequence (TypeDefinition DelimitedTypeDefinition*)? DelimitedTypeDefinition: uint(lengthOfTypeDefinition) TypeDefinition TypedValue: int(typeId) Value

func (deb *debugger) message(indent tab) bool

mustGetTypeInfo function #

Called only when a panic is acceptable and unexpected.

func mustGetTypeInfo(rt reflect.Type) *typeInfo

name method #

func (t *CommonType) name() string

name method #

Name returns the name of the type associated with the typeId.

func (t typeId) name() string

newArrayType function #

func newArrayType(name string) *arrayType

newDecoderState method #

We pass the bytes.Buffer separately for easier testing of the infrastructure without requiring a full Decoder.

func (dec *Decoder) newDecoderState(buf *decBuffer) *decoderState

newEncoderState method #

func (enc *Encoder) newEncoderState(b *encBuffer) *encoderState

newGobEncoderType function #

func newGobEncoderType(name string) *gobEncoderType

newMapType function #

func newMapType(name string) *mapType

newPeekReader function #

newPeekReader returns a peekReader that wraps r.

func newPeekReader(r io.Reader) *peekReader

newSliceType function #

func newSliceType(name string) *sliceType

newStructType function #

func newStructType(name string) *structType

newTypeObject function #

newTypeObject allocates a gobType for the reflection type rt. Unless ut represents a GobEncoder, rt should be the base type of ut. This is only called from the encoding side. The decoding side works through typeIds and userTypeInfos alone.

func newTypeObject(name string, ut *userTypeInfo, rt reflect.Type) (gobType, error)

nextInt method #

func (dec *Decoder) nextInt() int64

nextUint method #

func (dec *Decoder) nextUint() uint64

nilInterfaceValue method #

NilInterfaceValue: uint(0) [already read]

func (deb *debugger) nilInterfaceValue(indent tab) int

nonNilInterfaceValue method #

NonNilInterfaceValue: ConcreteTypeName TypeSequence InterfaceContents ConcreteTypeName: uint(lengthOfName) [already read=n] name InterfaceContents: int(concreteTypeId) DelimitedValue DelimitedValue: uint(length) Value

func (deb *debugger) nonNilInterfaceValue(indent tab, nameLen int)

overflow function #

func overflow(name string) error

peek method #

peek returns as many bytes as possible from the unread portion of the stream, up to the length of b.

func (p *peekReader) peek(b []byte) (n int, err error)

popWriter method #

popWriter pops the innermost writer.

func (enc *Encoder) popWriter()

print method #

func (t tab) print()

printBuiltin method #

printBuiltin prints a value not of a fundamental type, that is, one whose type is known to gobs at bootstrap time.

func (deb *debugger) printBuiltin(indent tab, id typeId)

printCommonType method #

printCommonType prints a common type; used by printWireType.

func (deb *debugger) printCommonType(indent tab, kind string, common *CommonType)

printWireType method #

printWireType prints the contents of a wireType.

func (deb *debugger) printWireType(indent tab, wire *wireType)

pushWriter method #

pushWriter adds a writer to the encoder.

func (enc *Encoder) pushWriter(w io.Writer)

readMessage method #

readMessage reads the next nbytes bytes from the input.

func (dec *Decoder) readMessage(nbytes int)

recvMessage method #

recvMessage reads the next count-delimited item from the input. It is the converse of Encoder.writeMessage. It returns false on EOF or other error reading the message.

func (dec *Decoder) recvMessage() bool

recvType method #

recvType loads the definition of a type.

func (dec *Decoder) recvType(id typeId)

registerBasics function #

func registerBasics()

safeString method #

func (s *structType) safeString(seen map[typeId]bool) string

safeString method #

func (a *arrayType) safeString(seen map[typeId]bool) string

safeString method #

func (m *mapType) safeString(seen map[typeId]bool) string

safeString method #

func (t *CommonType) safeString(seen map[typeId]bool) string

safeString method #

func (g *gobEncoderType) safeString(seen map[typeId]bool) string

safeString method #

func (s *sliceType) safeString(seen map[typeId]bool) string

sendActualType method #

sendActualType sends the requested type, without further investigation, unless it's been sent before.

func (enc *Encoder) sendActualType(w io.Writer, state *encoderState, ut *userTypeInfo, actual reflect.Type) (sent bool)

sendType method #

sendType sends the type info to the other side, if necessary.

func (enc *Encoder) sendType(w io.Writer, state *encoderState, origt reflect.Type) (sent bool)

sendTypeDescriptor method #

sendTypeDescriptor makes sure the remote side knows about this type. It will send a descriptor if this is the first time the type has been sent.

func (enc *Encoder) sendTypeDescriptor(w io.Writer, state *encoderState, ut *userTypeInfo)

sendTypeId method #

sendTypeId sends the id, which must have already been defined.

func (enc *Encoder) sendTypeId(state *encoderState, ut *userTypeInfo)

setError method #

func (enc *Encoder) setError(err error)

setId method #

func (t *CommonType) setId(id typeId)

setTypeId function #

func setTypeId(typ gobType)

singletonValue method #

SingletonValue: uint(0) FieldValue

func (deb *debugger) singletonValue(indent tab, id typeId)

sliceValue method #

SliceValue: uint(n) (n FieldValue)

func (deb *debugger) sliceValue(indent tab, wire *wireType)

string method #

func (m *mapType) string() string

string method #

func (a *arrayType) string() string

string method #

func (s *structType) string() string

string method #

func (s *sliceType) string() string

string method #

string returns the string at the input point.

func (deb *debugger) string() string

string method #

func (t *CommonType) string() string

string method #

func (w *wireType) string() string

string method #

func (g *gobEncoderType) string() string

string method #

string returns the string representation of the type associated with the typeId.

func (t typeId) string() string

structValue method #

StructValue: (uint(fieldDelta) FieldValue)*

func (deb *debugger) structValue(indent tab, id typeId)

toInt function #

toInt turns an encoded uint64 into an int, according to the marshaling rules.

func toInt(x uint64) int64

typeDefinition method #

TypeDefinition: [int(-typeId) (already read)] encodingOfWireType

func (deb *debugger) typeDefinition(indent tab, id typeId)

typeId method #

typeId returns the type id at the input point.

func (deb *debugger) typeId() typeId

typeString method #

typeString returns a human-readable description of the type identified by remoteId.

func (dec *Decoder) typeString(remoteId typeId) string

uint method #

uint returns the unsigned int at the input point, as a uint (not uint64).

func (deb *debugger) uint() uint

uint64 method #

uint64 returns and decodes the next unsigned integer, which must be present. Don't call this if you could be at EOF. TODO: handle errors better.

func (deb *debugger) uint64() uint64

update method #

update emits a field number and updates the state to record its value for delta encoding. If the instruction pointer is nil, it does nothing

func (state *encoderState) update(instr *encInstr)

userType function #

userType returns, and saves, the information associated with user-provided type rt. If the user type is not valid, it calls error.

func userType(rt reflect.Type) *userTypeInfo

valid function #

valid reports whether the value is valid and a non-nil pointer. (Slices, maps, and chans take care of themselves.)

func valid(v reflect.Value) bool

validUserType function #

validUserType returns, and saves, the information associated with user-provided type rt. If the user type is not valid, err will be non-nil. To be used when the error handler is not set up.

func validUserType(rt reflect.Type) (*userTypeInfo, error)

value method #

Value: SingletonValue | StructValue

func (deb *debugger) value(indent tab, id typeId)

writeByte method #

func (e *encBuffer) writeByte(c byte)

writeMessage method #

writeMessage sends the data item preceded by an unsigned count of its length.

func (enc *Encoder) writeMessage(w io.Writer, b *encBuffer)

writer method #

writer returns the innermost writer the encoder is using.

func (enc *Encoder) writer() io.Writer

Generated with Arrow