我在這里有點困惑,盡管我對此進行了大量搜索,但我的知識中顯然缺少某些東西,我正在尋求您的幫助。
我創建了一個 Hyperledger Fabric Network 并在其中安裝了一個鏈碼。我想創建一個函式來檢索有關密鑰的所有世界狀態輸入。我已經用 完成了它bytes.Buffer并且它起作用了。但我想做的是用結構來做。
因此,我創建了以下只有密鑰的結構:
type WSKeys struct {
Key string `json: "key"`
Namespace string `json: "Namespace"`
}
這是我的代碼功能:
func (s *SmartContract) getAllWsDataStruct(APIstub shim.ChaincodeStubInterface , args []string) sc.Response {
var keyArrayStr []WSKeys
resultsIterator, err := APIstub.GetQueryResult("{\"selector\":{\"_id\":{\"$ne\": null }} }")
if err != nil {
return shim.Error("Error occured when trying to fetch data: " err.Error())
}
for resultsIterator.HasNext() {
// Get the next record
queryResponse, err := resultsIterator.Next()
if err != nil {
return shim.Error(err.Error())
}
fmt.Println(queryResponse)
var qry_key_json WSKeys
json.Unmarshal([]byte(queryResponse), &qry_key_json)
keyArray = append(keyArray, qry_key_json)
}
defer resultsIterator.Close()
all_bytes, _ := json.Marshal(keyArray)
fmt.Println(keyArray)
return shim.Success(all_bytes)
}
執行上述操作時,出現以下錯誤:
cannot convert queryResponse (type *queryresult.KV) to type []byte
例如,如果我這樣做,我可以正確獲得結果:
func (s *SmartContract) getAllWsDataStruct(APIstub shim.ChaincodeStubInterface , args []string) sc.Response {
var keyArray []string
resultsIterator, err := APIstub.GetQueryResult("{\"selector\":{\"_id\":{\"$ne\": null }} }")
if err != nil {
return shim.Error("Error occured when trying to fetch data: " err.Error())
}
for resultsIterator.HasNext() {
// Get the next record
queryResponse, err := resultsIterator.Next()
if err != nil {
return shim.Error(err.Error())
}
fmt.Println(queryResponse)
keyArray = append(keyArray, queryResponse.Key)
}
defer resultsIterator.Close()
all_bytes, _ := json.Marshal(keyArray)
fmt.Println(keyArray)
return shim.Success(all_bytes)
}
但是,為什么在嘗試將 queryResponse 添加到自定義結構時會出現上述錯誤?我是否需要將它添加到一個只有它的型別的結構中?
請有人可以解釋我在這里缺少什么?
謝謝
uj5u.com熱心網友回復:
錯誤陳述句足夠冗長,表明您[]byte的型別轉換失敗queryResponse,稍加查找似乎是struct type。在 Go 中,如果不使用 gob 或其他方式進行編碼,則無法將結構體實體本地轉換為其組成位元組。
也許您的意圖是使用Key結構中的記錄進行解組
json.Unmarshal([]byte(queryResponse.Key), &qry_key_json)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/343546.html
上一篇:在立即運行服務器之前釋放埠
