本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1 问题描述
因为我message.proto和group.proto都定义了ChatMsg这个结构, 在api层调用这两个rpc时, 就出现了ChatMsg 名称冲突
2 如何解决?
(1) 方法1
我发现这两个文件生成go的包名都叫proto, 所以会导致proto包下有两个ChatMsg
讲道理, 我们只需要给其中一个改一下包名, 比如group下的proto改成pbgroup
呃, 还是不行
(2) 方法2
解决这个问题的核心是解决命名冲突, 那我们只让message.proto有ChatMsg这个结构, 让group.proto去import就行了
先给message.proto加个包名, 为了避免和proto关键字冲突, 这里就叫msg
再给group.proto加上包名, 并导入message
然后在用到ChatMsg的地方, 都用msg.ChatMsg来代替
再用protoc重新生成一次pb.go和_grpc.pb.go
root@tencent:~/code/ws_chat # protoc --go_out=./ --go-grpc_out=./ app/group/rpc/group.proto
结果发现group.pb.go报错,
这主要是proto文件的导包方式和go文件的导包方式不同, 为了导包成功, 我们需要手动加上module名在前面 . 暂时没找到更好的办法了 如果您有更好的办法, 欢迎在评论区留言