代码 > 慎用golang中的append操作
2017-02-28
golang的slice是一个极好用的东西。
用slice自然少不得会使用append。
我自己做的midderware组块核心就是一个Func的slice
不知不觉就踩了一个坑。
具体来说,在加入csrf模块后,发现了奇怪的现象。
本来访问正常的页面,在路由加入2个middleware后报404,一个Middleware时不报。
为了解决这个问题,差不多把所有有关无关的代码都看了遍。无数的断点和测试,一步一步f11调试。
最后,锁定问题为:
在加入的middleware数量达到两个后,只有随后一个设置的路由起效。
调整代码顺序可以证实。
实在没办法后,脑洞大开。
觉得分明就是golang做了优化么,把相同的仅包含相同内容slice的struct当成了同一个。
把Use函数做了下修改
从
target.SetHandlers(funcs...)
改为
f:=make(funcxx,len(funcs))
copy(f,funcs)
target.SetHandlers(f)
问题解决
一瞬间我感觉到了地鼠对我有深深的恶意
点击登录