反序列化:
func (s *Service) UnmarshalQuery(b []byte) (io.Reader, string, query.ExecutionOptions, error) {
index := (uint64)(0)
over := index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery rt len index : %d', index))
uid := ''
var opts query.ExecutionOptions
var qr io.Reader
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery qr len index : %d', index))
qrLen := binary.BigEndian.Uint64(b[index:over])
if 0 < qrLen {
index = over
over = index + qrLen
s.Logger.Info(fmt.Sprintf('UnmarshalQuery qr value index : %d, qrLen: %d', index, qrLen))
str := string(b[index:over])
qr = strings.NewReader(str)
}
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery uid len index : %d', index))
uidLen := binary.BigEndian.Uint64(b[index:over])
index = over
over = over + uidLen
s.Logger.Info(fmt.Sprintf('UnmarshalQuery uid value index : %d, uidLen: %d', index, uidLen))
uid = (string)(b[index:over])
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery database len index : %d', index))
databaseLen := binary.BigEndian.Uint64(b[index:over])
if 0 < databaseLen {
index = over
over = over + databaseLen
s.Logger.Info(fmt.Sprintf('UnmarshalQuery database value index : %d, databaseLen: %d', index, databaseLen))
database := (string)(b[index:over])
opts.Database = database
}
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery retentionPolicy len index : %d', index))
retentionPolicyLen := binary.BigEndian.Uint64(b[index:over])
if 0 < retentionPolicyLen {
index = over
over = over + retentionPolicyLen
s.Logger.Info(fmt.Sprintf('UnmarshalQuery retentionPolicy value index : %d, databaseLen: %d', index, retentionPolicyLen))
retentionPolicy := (string)(b[index:over])
opts.RetentionPolicy = retentionPolicy
}
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery chunkSize len index : %d', index))
chunkSize := binary.BigEndian.Uint64(b[index:over])
opts.ChunkSize = int(chunkSize)
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery nodeID len index : %d', index))
nodeID := binary.BigEndian.Uint64(b[index:over])
opts.NodeID = nodeID
index = over
over = index + 8
s.Logger.Info(fmt.Sprintf('UnmarshalQuery readOnly len index : %d', index))
readOnlyLen := binary.BigEndian.Uint64(b[index:over])
index = over
over = over + readOnlyLen
s.Logger.Info(fmt.Sprintf('UnmarshalQuery readOnly value index : %d, readOnlyLen: %d', index, readOnlyLen))
readonly := (string)(b[index:over])
opts.ReadOnly = readonly == 'true'
index = over
s.Logger.Info(fmt.Sprintf('UnmarshalQuery over index : %d', index))
return qr, uid, opts, nil
}
为保证能将query接口相关的数据写入raft的日志,本文记录如何将其序列化与反序列化
核心函数:
Influxdb将创建库/measurement/user/策略等相关接口的实现,放在了对外的query中.
文章为作者独立观点,不代表股票交易接口观点