问题背景:
- core.Biz 是个泛型类,包含一些通用的逻辑
- core.BizOptions 也是泛型结构,包含一些钩子函数供 core.Biz 调用
现在问题是,类型参数很长,且重复:
1
xianyukang OP |
2
fds 20 天前
……我觉得能用 interface 解决的就别用泛型。
|
3
DefoliationM 20 天前 via Android 1
@fds 别你觉得了,能泛型就泛型,对自己和别人都好点。
|
4
qW7bo2FbzbC0 20 天前 2
@DefoliationM 遇到这样的代码简直灾难
|
5
xuanbg 20 天前
类或方法本身要和类型无关,才能设计为泛型类或者泛型方法。泛型参数的本质是用来传递类型信息,为了在末端能够获取到正确的类型来处理数据。
|
6
xiaocaiji111 19 天前
这个应该是想在执行前,记录日志,比如入参和返回值什么的吧。
说实话没有特别好的办法,要不要换个思路实现?中间件里实现不了吗?。如果是记录日志之类的远不如 java 中切面好用,除了那可恶的内存占用和巨大的胖 jar 。 |
7
lesismal 19 天前 1
@DefoliationM
> 能泛型就泛型,对自己和别人都好点 那些基础库, 例如数学的不同类型的, 或者涉及数组或 map 之类的容器遍历的, 用范型能简化代码 其他不必要性的场景, 硬上范型就是坑队友了 滥用范型会让代码越来越丑 |
8
Nazz 19 天前 1
在不适合的场景强上泛型
|
9
Dogtler 19 天前
至今没用过泛型。。用不太习惯
|
10
k1526783667 19 天前
@xianyukang 可以使用 interface 限制一下
type Base interface { ~int | ~string | ~map[string]string } func Test[T Base](t T) { fmt.Println(t) } func main() { Test("11") } |
11
kaf 19 天前 1
官方有提到,泛型的推荐应用场景是你对输入和输出类型都明确的情况下
|
12
CloveAndCurrant 19 天前
没有太好的办法吧,要么不用泛型用 any ,要么用别名,rust 遇到这种问题也是用别名来解决
|
13
povsister 19 天前 via iPhone
你这是不适合用泛型的强上…. 灾难
|
14
Rickkkkkkk 19 天前
是应该用泛型的场景吗?
|
15
sampeng 19 天前
就这?看看 rust 的签名
|
17
COW 19 天前 via Android
TS 的泛型好像更复杂。。。🤸♂️
|
18
realpg 19 天前
从来没用过泛型无所畏惧
|
19
chen05 18 天前
上范型就是坑,无法追踪代码错误
除非你输入明确类型,内部逻辑不复杂,并且输出类型单一 |