From: Rob Pike Date: Tue, 14 Dec 2010 22:04:52 +0000 (-0800) Subject: gob: document the byte count used in the encoding of values. X-Git-Tag: weekly.2010-12-15~19 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9f6de01d8d0f7c17fd88ed1d3082ee856acb2beb;p=gostls13.git gob: document the byte count used in the encoding of values. R=rsc CC=golang-dev https://golang.org/cl/3641041 --- diff --git a/src/pkg/gob/doc.go b/src/pkg/gob/doc.go index 2e7232db51..5d9eb51800 100644 --- a/src/pkg/gob/doc.go +++ b/src/pkg/gob/doc.go @@ -70,7 +70,7 @@ operation will fail. Structs, arrays and slices are also supported. Strings and arrays of bytes are supported with a special, efficient representation (see below). -Interfaces, functions, and channels cannot be sent in a gob. Attempting +Functions and channels cannot be sent in a gob. Attempting to encode a value that contains one will fail. The rest of this comment documents the encoding, details that are not important @@ -202,9 +202,14 @@ priori, as well as the basic gob types int, uint, etc. Their ids are: // 22 is slice of fieldType. mapType 23 +Finally, each message created by a call to Encode is preceded by an encoded +unsigned integer count of the number of bytes remaining in the message. After +the initial type name, interface values are wrapped the same way; in effect, the +interface value acts like a recursive invocation of Encode. + In summary, a gob stream looks like - ((-type id, encoding of a wireType)* (type id, encoding of a value))* + (byteCount (-type id, encoding of a wireType)* (type id, encoding of a value))* where * signifies zero or more repetitions and the type id of a value must be predefined or be defined before the value in the stream.