我坐在一个 Go 结构中,其中变量中有一个日期类型。使用此日期字段将订单应用于结构时,不会返回日期,仅返回默认值。我正在使用超级账本结构来存储值并检索它们。存储在链码中的值是这样的:
Chaincode invoke successful. result: status:200 payload:"{\"XXX\":1,\"YYY\":12 ,\"ZZZ\":92,\"DATE\":16/Nov/2020 17:50:04}"
我使用 time.NOW().UTC().Format(....) 在链代码中设置的“日期”参数
我有一个名为 N 的结构,其中包含以下字段:
type N struct {
Xxx int `json:"XXX"`
Yyy int `json:"YYY"`
Zzz float64 `json:"ZZZ"`
Date time.Time `json:"DATE"`
}
我正在尝试使用函数 GetHistoryForKey(args[0]) 进行恢复
hist, err := APIstub.GetHistoryForKey(args[0])
var listHist = make([]N, 0)
for hist.HasNext() {
resp, err := hist.Next()
var node N
err = json.Unmarshal(resp.Value, &node)
listHist = append(listHist, node)
}
sort.Slice(listHist, func(i, j int) bool { return listHist[i].Date.Before(listHist[j].Date) })
var buffer bytes.Buffer
var jsonStr string
for _, nodo := range listHist {
jsonBytes, _ := json.Marshal(node)
jsonStr = string(jsonBytes[:])
buffer.WriteString(jsonStr)
}
return buffer.String(), nil
但是当我调用这个函数对历史进行排序时,DATE 值出现了错误,如下所示:
{"XXX":1,"YYY":12,"ZZZ":92,"DATE":"0001-01-01T00:00:00Z"}
如果我调用恢复此特定键的其他函数,则正确的值返回 ok。
{"XXX":1,"YYY":12,"ZZZ":92,"DATE":16/Nov/2020 17:50:04}
我做错了什么没有排序的返回值?
我这样设置日期:
func set(stub shim.ChaincodeStubInterface, args []string) (string, error) {
if len(args) != 2 {
return "", fmt.Errorf("Something error")
}
var currDate = time.Now().UTC().Format(("02/Jan/2006 15:04:05"))
var ret = strings.Replace(args[1], "???", currDate, -1)
err := stub.PutState(args[0], []byte(ret))
if err != nil {
return "", fmt.Errorf("something", args[0])
}
return retorno, nil
}
通过此代码调用:
docker exec -it cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n mychain -c '{"Args":["set","key1", "{\"XXX\":1,\"YYY\":80,\"ZZZ\":30.0,"\DATE\":???}"]}'