登录
首页 >  Golang >  Go问答

golang 中的 marshal 和 Unmarshall 错误

来源:stackoverflow

时间:2024-03-06 10:06:27 399浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《golang 中的 marshal 和 Unmarshall 错误》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我是 golang 新手,同时创建下面的区块链智能合约功能

func (s *SmartContract)  changeStatus(APIstub shim.ChaincodeStubInterface,args[]string) sc.Response{
    if len(args) != 2 {
        return shim.Error("Incorrect number of arguments. Expecting 2")
    }
    licenceAsBytes, _ := APIstub.GetState(args[0]);
    var result Licence
    json.Unmarshal([]byte(licenceAsBytes), result)
    result.Status := args[1]
    licenceAsBytes, _ := json.Marshal(result)
    APIstub.PutState(args[0], licenceAsBytes);

    return shim.Success(nil)

}

当我调用此函数时,出现以下错误:

错误:无法组装交易,错误提案响应未成功,错误代码 500,消息错误启动容器:启动容器时出错:无法生成特定于平台的 docker 构建:构建返回错误:2 "# github.com/fabcar/去 chaincode/input/src/github.com/fabcar/go/fabcar.go:110:8:非名称结果。状态位于 := 左侧 chaincode/input/src/github.com/fabcar/go/fabcar.go:111:20: := 左侧没有新变量 ”


解决方案


@icza pointed out 所示,您不能在一个块内使用两次速记符号,如下所示:

licenceasbytes, _ := apistub.getstate(args[0]);
...
licenceasbytes, _ := json.marshal(result)

第二个应该是:

licenceasbytes, _ = json.marshal(result)

同样,以下内容也是无效的:

result.Status := args[1]

因为它没有定义新变量(它为结构体字段分配一个值)。

虽然不是错误,但对于可能投入生产的任何内容,您可能不希望默默地忽略错误(就像您当前的代码片段那样,3x)。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《golang 中的 marshal 和 Unmarshall 错误》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>