code: func Deserialize(byt []byte, ptr interface{}) (err error) {
  	if data, ok := ptr.(*[]byte); ok {
  		*data = byt
  		return
  	}
  
  	if v := reflect.ValueOf(ptr); v.Kind() == reflect.Ptr {
  		switch p := v.Elem(); p.Kind() {
  		case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
  			var i int64
  			i, err = strconv.ParseInt(string(byt), 10, 64)
  			if err != nil {
  				cacheLog.Error("Deserialize: failed to parse int", "value", string(byt), "error", err)
  			} else {
  				p.SetInt(i)
  			}
  			return
  
  		case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
  			var i uint64
  			i, err = strconv.ParseUint(string(byt), 10, 64)
  			if err != nil {
  				cacheLog.Error("Deserialize: failed to parse uint", "value", string(byt), "error", err)
  			} else {
  				p.SetUint(i)
  			}
  			return
  		}
  	}
  
  	b := bytes.NewBuffer(byt)
  	decoder := gob.NewDecoder(b)
  	if err = decoder.Decode(ptr); err != nil {
  		cacheLog.Error("Deserialize: glob decoding failed", "error", err)
  		return
  	}
  	return
  }
docs: // Deserialize transforms bytes produced by Serialize back into a Go object,
  // storing it into "ptr", which must be a pointer to the value type.