做棋子网站怎么提高浏览量,中国十大平面设计师,网站制作百度网盘,wordpress快速仿站视频教程上周某天下班前#xff0c;接到同事转来一个bug要排查#xff0c;症状是代码重构之后某些业务效果不符合预期#xff0c;由于代码重构人是笔者#xff0c;于是blame到笔者这边。经过10min左右的排查和尝试后#xff0c;解决了这个问题#xff1a;既往逻辑没有改动#x…上周某天下班前接到同事转来一个bug要排查症状是代码重构之后某些业务效果不符合预期由于代码重构人是笔者于是blame到笔者这边。经过10min左右的排查和尝试后解决了这个问题既往逻辑没有改动重构时候出笔误了。
简单来讲重构之前的代码大概是这个样子
func beforeRefactor() {var configListExpr fetchConfigListExpr()newConfigListExpr : replaceConfigVariables(configListExpr)var configList []Configif err : json.Unmarshal([]byte(newConfigListExpr), configList); err ! nil {panic(unmarshal configList err: err.Error())}return configList
}而改造业务逻辑时因为类似于replaceVariables这类对configList批量处理的流程更多所以定义了很多函数节点去对configList做批量的替换以及内部属性的修改。因此重构时候就把replaceConfigVariables做了更细粒度的转换然后同时把整个configList替换逻辑也顺带修改了下。大概改成了这样
func afterRefactor() {var configList []Config fetchConfigList()for _, config : range configList {urlList : config.URLListnewURLList replaceURLListVariables(urlList)config.URLList newURLList}return configList
}这段代码是存在问题的。由于这次重构提的代码很多cr时候没有发现然后一开始排查以为是重构引起的业务逻辑变更所以忽略了Golang本身机制导致的问题。这里的问题是遍历slice的时候要想改动原来slice里成员的属性不应该用config这个复制品而得用configList取下标这种方式来取到原始的成员实例或者干脆把configList整个全新替换这样才可以达到效果。