我坐在Go结构上,其中变量中有一个日期类型。使用此日期字段将订单应用于结构时,不会返回日期,只返回默认值。我正在使用hyperledger结构来存储值并取回它们。链码中存储的值如下:
Chaincode invoke successful. result: status:200 payload:"{"XXX":1,"YYY":12 ,"ZZZ":92,"DATE":16/Nov/2020 17:50:04}"
其中;日期";我使用时间在链代码中设置的参数。NOW((。UTC((。格式化(……(
我有一个名为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:00Z"}
如果我调用其他函数来恢复这个特定的密钥,则正确的值返回ok。
{"XXX":1,"YYY":12,"ZZZ":92,"日期":2020年11月16日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
}
调用througth此代码:
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":???}"]}'
在将输入日期插入区块链之前,我将其格式设置为0001-01-01T00:00Z,从而解决了这个问题。当我搜索时,日期的格式是正确的,具有正确的值。