func newSymbolTable() *symtab {
	return &symtab{
		name:         make(map[string]*codec),
		nullCodec:    &codec{nm: &name{n: "null"}, df: nullDecoder, ef: nullEncoder},
		booleanCodec: &codec{nm: &name{n: "bool"}, df: booleanDecoder, ef: booleanEncoder},
		intCodec:     &codec{nm: &name{n: "int32"}, df: intDecoder, ef: intEncoder},
		longCodec:    longCodec(),
		floatCodec:   &codec{nm: &name{n: "float32"}, df: floatDecoder, ef: floatEncoder},
		doubleCodec:  &codec{nm: &name{n: "float64"}, df: doubleDecoder, ef: doubleEncoder},
		bytesCodec:   &codec{nm: &name{n: "[]uint8"}, df: bytesDecoder, ef: bytesEncoder},
		stringCodec:  &codec{nm: &name{n: "string"}, df: stringDecoder, ef: stringEncoder},
	}

}
// NOTE: use Go type names because for runtime resolution of
// union member, it gets the Go type name of the datum sent to
// the union encoder, and uses that string as a key into the
// encoders map
use Go type names because for runtime resolution of
union member, it gets the Go type name of the datum sent to
the union encoder, and uses that string as a key into the
encoders map
// NOTE : use Go type names because for runtime resolution of // union member it gets the Go type name of the datum sent to // the union encoder and uses that string as a key into the // encoders map
func newSymbolTable() *symtab {
	return &symtab{
		name:         make(map[string]*codec),
		nullCodec:    &codec{nm: &name{n: "null"}, df: nullDecoder, ef: nullEncoder},
		booleanCodec: &codec{nm: &name{n: "bool"}, df: booleanDecoder, ef: booleanEncoder},
		intCodec:     &codec{nm: &name{n: "int32"}, df: intDecoder, ef: intEncoder},
		longCodec:    longCodec(),
		floatCodec:   &codec{nm: &name{n: "float32"}, df: floatDecoder, ef: floatEncoder},
		doubleCodec:  &codec{nm: &name{n: "float64"}, df: doubleDecoder, ef: doubleEncoder},
		bytesCodec:   &codec{nm: &name{n: "[]uint8"}, df: bytesDecoder, ef: bytesEncoder},
		stringCodec:  &codec{nm: &name{n: "string"}, df: stringDecoder, ef: stringEncoder},
	}
}
func newSymbolTable ( ) * symtab { return & symtab { name : make ( map [ string ] * codec ) , nullCodec : & codec { nm : & name { n : " " } , df : nullDecoder , ef : nullEncoder } , booleanCodec : & codec { nm : & name { n : " " } , df : booleanDecoder , ef : booleanEncoder } , intCodec : & codec { nm : & name { n : " " } , df : intDecoder , ef : intEncoder } , longCodec : longCodec ( ) , floatCodec : & codec { nm : & name { n : " " } , df : floatDecoder , ef : floatEncoder } , doubleCodec : & codec { nm : & name { n : " " } , df : doubleDecoder , ef : doubleEncoder } , bytesCodec : & codec { nm : & name { n : " " } , df : bytesDecoder , ef : bytesEncoder } , stringCodec : & codec { nm : & name { n : " " } , df : stringDecoder , ef : stringEncoder } , } }
use Go type names because for runtime resolution of
union member, it gets the Go type name of the datum sent to
the union encoder, and uses that string as a key into the
encoders map
use Go type names because for runtime resolution of union member it gets the Go type name of the datum sent to the union encoder and uses that string as a key into the encoders map