使用go语言写一个软件后端服务,遇到个问题不太明

yz23je · 2023-01-04 14:54:16 · 5453 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2023-01-04 14:54:16 的主题,其中的信息可能已经有所发展或是发生改变。

写的这个软件不是web,前端用的是QT写的,后端打算是用go来写,前端和后端通信使用的是TCP协议。 现在遇到的问题:

如下,要怎样才可以实现后端收到前端数据包后发现有字符串"ExecLogin",就能调用到func (this *LoginClass) ExecLogin(str string) 来执行操作呢?不止登陆,前端肯定还有各种各样的功能,要怎样才能弄成通用的方式,就是后端收到数据包能根据数据包中的字符串名来调用相应的执行函数。不知道泛型能不能实现

// login登陆类
type LoginClass struct{}

// 执行登陆操作
func (this *LoginClass) ExecLogin(str string) {
    .....
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5453 次点击  ∙  1 赞  
加入收藏 微博
16 回复  |  直到 2023-01-16 00:25:27
guokun1998
guokun1998 · #1 · 2年之前

建一个map[string]func(data []byte)

映射函数名称和函数。提前add到map中。

运行时函数名称应该只有反射能拿到吧。

guokun1998
guokun1998 · #2 · 2年之前

建议使用http协议,一个是因为有很多http协议的框架开发很方便,另一个是tcp有粘包的风险。

shoyer2010
shoyer2010 · #3 · 2年之前

你需要用反射。

6133302
6133302 · #4 · 2年之前

3楼 @shoyer2010 附意

yz23je
yz23je · #5 · 2年之前
guokun1998guokun1998 #1 回复

建一个`map[string]func(data []byte)` 映射函数名称和函数。提前add到map中。 运行时函数名称应该只有反射能拿到吧。

看来还是得用map的那种方式了,http考虑过,但不合适当下自己写的项目,也就没用了。

yz23je
yz23je · #6 · 2年之前
shoyer2010shoyer2010 #3 回复

你需要用反射。

反射的方式考虑过,还是在想有没有更好的方式

Ysmword
Ysmword · #7 · 2年之前

map方式会比反射好点

codeJoker
codeJoker · #8 · 2年之前

题主之前写java的吧,可以用反射实现,写的通用一点,增加新接口,这里基本不用怎么改动

xwszt
xwszt · #9 · 2年之前

先将协议(数据格式,包括调用方法,参数以及返回值)定义好,然后编码为GOB,通过TCP传输;

接收到数据后GOB解码,然后根据解码后的数据进行业务方法调用

这个不就是gRPC的使用流程嘛

yz23je
yz23je · #10 · 2年之前
codeJokercodeJoker #8 回复

题主之前写java的吧,可以用反射实现,写的通用一点,增加新接口,这里基本不用怎么改动

题主之前没写过java,学编程纯爱好。现在就想写点东西出来而已。其实之前也考虑过反射,但是看了很多文章说反射会影响性能,心里就有点咯噔了……有点……选择困难症的感觉……

yz23je
yz23je · #11 · 2年之前
xwsztxwszt #9 回复

先将协议(数据格式,包括调用方法,参数以及返回值)定义好,然后编码为GOB,通过TCP传输; 接收到数据后GOB解码,然后根据解码后的数据进行业务方法调用 这个不就是gRPC的使用流程嘛

现在写的软件差不多就是这样,不过因为前端使用的是QT所以,不知道QT怎么对编码的GOB进行解码……

yz23je
yz23je · #12 · 2年之前
YsmwordYsmword #7 回复

map方式会比反射好点

有点偏向这种方式……又担心以后添加新功能时,不知道会不会有什么隐藏问题……可能最终会使用这样的方式吧

don178
don178 · #13 · 2年之前

要做成通用的,还是要用反射

xwszt
xwszt · #14 · 2年之前

11楼 @yz23je gRPC默认编码格式就是GOB

我找到一篇文章,关于gRPC的QT实现[https://blog.csdn.net/Fallinlove520/article/details/121989585],参考一下

我觉得你这个需求RPC的方式很适合,出了业务远程调用外,登陆、鉴权等安全方面也需要考虑进去

yz23je
yz23je · #15 · 2年之前
xwsztxwszt #14 回复

11楼 @yz23je gRPC默认编码格式就是GOB 我找到一篇文章,关于gRPC的QT实现[https://blog.csdn.net/Fallinlove520/article/details/121989585],参考一下 我觉得你这个需求RPC的方式很适合,出了业务远程调用外,登陆、鉴权等安全方面也需要考虑进去

谢谢,我看看

wln123
wln123 · #16 · 2年之前

这不就是rpc吗,直接上rpc吧

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传