aceld / aceld/zinx

clone函数切片应该使用深拷贝

Aberta
#293 5 comentários 0 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Go
Estrelas
7.8k
Forks
1.3k
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

```ruby
func (h *HeartbeatChecker) Clone() ziface.IHeartbeatChecker {

heartbeat := &HeartbeatChecker{
interval: h.interval,
quitChan: make(chan bool),
beatFunc: h.beatFunc,
makeMsg: h.makeMsg,
onRemoteNotAlive: h.onRemoteNotAlive,
msgID: h.msgID,
router: h.router,
routerSlices: h.routerSlices,
conn: nil, // The bound connection needs to be reassigned
}

return heartbeat
}
```

其中routerSlices是一个切片,他应该使用深拷贝,否则修改原始hb会修改新的hb,例如

```ruby
func HeatBeatDefaultHandle111(req ziface.IRequest) {
zlog.Ins().InfoF("Recv Heartbeat from %s, MsgID = %+v, Data = %s",
req.GetConnection().RemoteAddr(), req.GetMsgID(), string(req.GetData()))
}
func TestHeartbeatChecker_Clone(t *testing.T) {
hb := NewHeartbeatChecker(1)
//t.Log(len(hb.RouterSlices()), cap(hb.RouterSlices()))
new_hb := hb.Clone()

new_hb.BindRouterSlices(123,HeatBeatDefaultHandle)
new_hb.BindRouterSlices(123,HeatBeatDefaultHandle)
//t.Log(len(new_hb.RouterSlices()), cap(new_hb.RouterSlices()), new_hb.RouterSlices())

new_new_hb := new_hb.Clone()
//t.Log(len(new_new_hb.RouterSlices()), cap(new_new_hb.RouterSlices()),new_new_hb.RouterSlices())
new_new_hb.BindRouterSlices(123,HeatBeatDefaultHandle)
t.Log("new_new_hb",len(new_new_hb.RouterSlices()), cap(new_new_hb.RouterSlices()),new_new_hb.RouterSlices())
t.Log("new_hb",len(new_hb.RouterSlices()), cap(new_hb.RouterSlices()),new_hb.RouterSlices())

new_hb.BindRouterSlices(123,HeatBeatDefaultHandle111)
t.Log("new_new_hb",len(new_new_hb.RouterSlices()), cap(new_new_hb.RouterSlices()),new_new_hb.RouterSlices())
t.Log("new_hb",len(new_hb.RouterSlices()), cap(new_hb.RouterSlices()),new_hb.RouterSlices())
}
```

进行测试会发现,修改原始new_hb,new_new_hb会修改
```ruby
heartbeat_test.go:24: new_new_hb 4 4 [0x1022c2ed0 0x1022c2ed0 0x1022c2ed0 0x1022c2ed0]
heartbeat_test.go:25: new_hb 3 4 [0x1022c2ed0 0x1022c2ed0 0x1022c2ed0]
heartbeat_test.go:28: new_new_hb 4 4 [0x1022c2ed0 0x1022c2ed0 0x1022c2ed0 0x1022cc0e0]
heartbeat_test.go:29: new_hb 4 4 [0x1022c2ed0 0x1022c2ed0 0x1022c2ed0 0x1022cc0e0]
```

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.