Closed xuyang3232 closed 5 years ago
// 增加一个 BridgeChanRpc
// 大概长这样:
type BridgeChanRpc struct{
Game *chanrpc.Server
Login *chanrpc.Server
}
//初始化的时候把下面的方法执行下。
func (m *BridgeChanRpc) SetGameChanRpc(xxx){
m.Game = xxx
}
func (m *BridgeChanRpc) SetLoginChanRpc(xxx){
m.Login = xxx
}
//然后就可以随便用了:
bridge.game.GO(xxxxx)
bridge.login.GO(xxxxx)
只要按 leaf 的规范来就不存在循环引用的问题
只要按 leaf 的规范来就不存在循环引用的问题
老大的回答简直秒杀..
@name5566 ,我不是很明白,不同Module属于不同的功能模块,功能模块之间相互调用应该免不了的,那应该遵循哪个规范才能避免?请赐教!
你就用2楼的方式,就可以了
@xuyang3232 遵循 leaf 规范不是说去避免循环引用,而是 leaf 规范已经支持了循环引用。具体看 leafserver 的写法,以及目前的一些范例。大概的规范是实现和接口分离,实现引用接口,比如说,a 模块的实现引用 b 模块的接口,而 b 模块的实现也可以引用 a 模块的接口,就是 a 和 b 模块循环引用了。再多的话也不如直接看代码容易理解
@name5566 ,谢谢,体会到了。
我也遇到这个问题 但是文档和leafserver 都没有模块相互调用的代码
大佬能贴一下相互调用的代码吗
比如有game和login两个Module,两个Module间会相互调用,比如login中调用game的rpc接口:game.ChanRPC.Go("xxx", agent,)。在game中也可能调用login的rpc接口,这样在import会出现循环依赖。不知道这种情况怎么解决?