概览

Encoder - 图1

JSON Encoder

Pool

  1. var _jsonPool = sync.Pool{New: func() interface{} {
  2. return &jsonEncoder{}
  3. }}

获取 jsonEncoder 对象

  1. func getJSONEncoder() *jsonEncoder {
  2. return _jsonPool.Get().(*jsonEncoder)
  3. }

释放 jsonEncoder 对象

  1. func putJSONEncoder(enc *jsonEncoder) {
  2. if enc.reflectBuf != nil {
  3. enc.reflectBuf.Free()
  4. }
  5. enc.EncoderConfig = nil
  6. enc.buf = nil
  7. enc.spaced = false
  8. enc.openNamespaces = 0
  9. enc.reflectBuf = nil
  10. enc.reflectEnc = nil
  11. _jsonPool.Put(enc)
  12. }

addKey

生成 json 格式的 key,避免使用 json.Marshal 而引入反射,降低性能

  1. func (enc *jsonEncoder) addKey(key string) {
  2. enc.addElementSeparator()
  3. enc.buf.AppendByte('"')
  4. enc.safeAddString(key)
  5. enc.buf.AppendByte('"')
  6. enc.buf.AppendByte(':')
  7. if enc.spaced {
  8. enc.buf.AppendByte(' ')
  9. }
  10. }