1. 首页
  2. 主题
  3. Go语言

没有泛型, 如何解决类型转换问题?

aaaaaaaa1 · · 2133 次点击
switch val:= inf.(type){ case A: val.sum = val.x+val.y+val.z case B: val.sum = val.x+val.y+val.z case C: val.sum = val.x+val.y+val.z case D: val.sum = val.x+val.y+val.z case E: val.sum = val.x+val.y+val.z } 我写的是游戏服务器, 模拟物理引擎. 有几十种形状, 形状的属性还有各种差异, 又要把这些形状分组存放到map[][interface]中; 总之十分复杂; a. 使用接口模式: 比如获取形状type, 使用getType()接口, 然后呢? .(type)又没法存储, 如何转换为具体类型? 只能是switch, 就像上面代码那样. b.所有属性获取全部接口化, 这浪费性能, 也无意义; 在没有泛型的情况下, 复杂项目如何解决这interface类型转换问题? 难道只能switch val:= inf.(type), 甚至每个方法都要加上这复杂的代码? // 注: 用switch val:= inf.(type) 比直接使用接口性能更好. 没有泛型真是没法开发, 只能用interface{} + 重复代码, 或 switch val:= inf.(type) 浪费性能曲线解决问题; 所以, 是不是要换语言, 直接上C++ / RUST? 用C++代码演示我想要的功能: ![捕获.PNG](https://static.studygolang.com/210204/4bcc54bfb7eaa51672a5ead2eed007c0.PNG)![捕获.PNG]
只是好奇C++的那个例子里面怎么把这两种类型的实例放进某种容器类型里面
#24
更多评论
首先,go本身目前的生态就是个高效并发的脚本语言。不能无代价抽象,该用c/rust的地方当然要用。 其次,type当然可以保存啊,reflect.Type,你的点在哪里? 第三 ,你是要实现ecs模型?
#1
再然后,范型和类型转换也完全没关系啊。
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中