Go 如何将结构写入分类帐状态

Go 如何将结构写入分类帐状态,go,state,hyperledger-fabric,hyperledger-chaincode,chaincode,Go,State,Hyperledger Fabric,Hyperledger Chaincode,Chaincode,我正在尝试为Hyperledger编写链码,它具有映射,存储映射到字符串的结构值。这是我第一次为Hyperledger写合同,也是我第一次使用go,看来我的方法不对 这是显示问题的映射、数据结构、Init函数和addVData函数 type Data struct{ Timestamp string Velocity string Location string } var all_data map[string]Data func (t *DataContract)

我正在尝试为Hyperledger编写链码,它具有映射,存储映射到字符串的结构值。这是我第一次为Hyperledger写合同,也是我第一次使用go,看来我的方法不对

这是显示问题的映射、数据结构、Init函数和addVData函数

type Data struct{
    Timestamp string
    Velocity string
    Location string
}

var all_data map[string]Data

func (t *DataContract) Init(stub shim.ChaincodeStubInterface) peer.Response {
    all_data = make(map[string]Data)

    return shim.Success(nil)
}


func (t *DataContract) addVData(stub shim.ChaincodeStubInterface, args []string) peer.Response {
    params := stub.GetStringArgs()
    fmt.Println("The params passed in are:", params)

    if len(params) != 4 {
        fmt.Println("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
        return shim.Error("Please resubmit in this particular order: addVData, Timestamp, Velocity, Location")
    }

    var d = Data{Timestamp:params[1], Velocity:params[2], Location:params[3]}
    all_data[params[1]] = d

    var err = stub.PutState(params[1],d)

    return shim.Success(nil)
}
我得到的错误其实很清楚:

./data.go:79:35:无法在stub.PutState的参数中使用d(类型数据)作为类型[]字节

我想知道,既然我的数据不是字节数组的形式,我该如何存储它呢?
此外,我不确定我是否以正确的方式实现了Init方法和映射,但很难找到示例。如果您能解释一下并给我指出正确的方向,我们将非常感谢您。

使用
json.Marshal
函数将
struct
转换为
字节

type UserData struct {
 a string
}


userdata := &UserData{a: "hello"}

// Mashelling struct to jsonByte object to put it into the ledger
userDataJSONBytes, err := json.Marshal(&userdata)
if err != nil {
    return shim.Error(err.Error())
}

var err = stub.PutState(params[1],userDataJSONBytes)