Abh*_*ock 2 dictionary if-statement go
我在多层if-else-if条件上遇到了一个问题,因此我想通过使用地图进行简短说明。
请在if-else-if中查看以下代码,以将其替换为地图。
function, args := APIstub.GetFunctionAndParameters()
if function == "queryProduce" {
return s.queryProduce(APIstub, args)
} else if function == "initLedger" {
return s.initLedger(APIstub)
} else if function == "createProduce" {
return s.createProduce(APIstub, args)
} else if function == "queryAllProduces" {
return s.queryAllProduces(APIstub)
} else if function == "changeProduceStatus" {
return s.changeProduceStatus(APIstub, args)
}
return shim.Error("Invalid Smart Contract function name.")
}
Run Code Online (Sandbox Code Playgroud)
对于您所拥有的switch将是一个不错的选择:
switch function {
case "queryProduce":
return s.queryProduce(APIstub, args)
case "initLedger":
return s.initLedger(APIstub)
case "createProduce":
return s.createProduce(APIstub, args)
case "queryAllProduces":
return s.queryAllProduces(APIstub)
case "changeProduceStatus":
return s.changeProduceStatus(APIstub, args)
}
Run Code Online (Sandbox Code Playgroud)
使用地图会很不方便,因为并非所有方法都具有相同的签名,但是您可以使用多个地图。
另一个解决方案可能是使用反射来调用方法,但是同样,处理不同的参数将很不方便。反射速度也较慢,更不用说您必须避免不允许不打算公开的调用方法。有关示例,请参见使用特殊前缀/后缀调用函数。