From 70bd9332b0a9d5b89676f67e5755ae39da87dcef Mon Sep 17 00:00:00 2001 From: Ian Luo <ian.luo@gmail.com> Date: Tue, 18 Aug 2020 14:37:27 +0800 Subject: [PATCH] avoid reflection api --- cluster/router/chain/chain.go | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/cluster/router/chain/chain.go b/cluster/router/chain/chain.go index 369f24b3c..353ea82b4 100644 --- a/cluster/router/chain/chain.go +++ b/cluster/router/chain/chain.go @@ -18,7 +18,6 @@ package chain import ( - "reflect" "sort" "sync" "sync/atomic" @@ -141,8 +140,9 @@ func (c *RouterChain) loop() { func (c *RouterChain) copyRouters() []router.PriorityRouter { c.mutex.RLock() defer c.mutex.RUnlock() - ret := copySlice(c.routers) - return ret.([]router.PriorityRouter) + ret := make([]router.PriorityRouter, 0, len(c.routers)) + ret = append(ret, c.routers...) + return ret } // copyInvokers copies a snapshot of the received invokers. @@ -152,15 +152,9 @@ func (c *RouterChain) copyInvokers() []protocol.Invoker { if c.invokers == nil || len(c.invokers) == 0 { return nil } - ret := copySlice(c.invokers) - return ret.([]protocol.Invoker) -} - -func copySlice(s interface{}) interface{} { - t, v := reflect.TypeOf(s), reflect.ValueOf(s) - c := reflect.MakeSlice(t, v.Len(), v.Len()) - reflect.Copy(c, v) - return c.Interface() + ret := make([]protocol.Invoker, 0, len(c.invokers)) + ret = append(ret, c.invokers...) + return ret } // loadCache loads cache from sync.Value to guarantee the visibility -- GitLab