Go 泛型的类型参数太长且重复,有没有啥解决办法,或者我该换个实现思路?

37 天前
 xianyukang

问题背景:

- core.Biz 是个泛型类,包含一些通用的逻辑
- core.BizOptions 也是泛型结构,包含一些钩子函数供 core.Biz 调用

现在问题是,类型参数很长,且重复:

2336 次点击
所在节点    Go 编程语言
19 条回复
xianyukang
37 天前
使用 type alias 然后把 BeforeCreate 做成字段,似乎能简练一点:
![img]( )
fds
37 天前
……我觉得能用 interface 解决的就别用泛型。
DefoliationM
37 天前
@fds 别你觉得了,能泛型就泛型,对自己和别人都好点。
qW7bo2FbzbC0
37 天前
@DefoliationM 遇到这样的代码简直灾难
xuanbg
37 天前
类或方法本身要和类型无关,才能设计为泛型类或者泛型方法。泛型参数的本质是用来传递类型信息,为了在末端能够获取到正确的类型来处理数据。
xiaocaiji111
37 天前
这个应该是想在执行前,记录日志,比如入参和返回值什么的吧。
说实话没有特别好的办法,要不要换个思路实现?中间件里实现不了吗?。如果是记录日志之类的远不如 java 中切面好用,除了那可恶的内存占用和巨大的胖 jar 。
lesismal
37 天前
@DefoliationM

> 能泛型就泛型,对自己和别人都好点

那些基础库, 例如数学的不同类型的, 或者涉及数组或 map 之类的容器遍历的, 用范型能简化代码
其他不必要性的场景, 硬上范型就是坑队友了
滥用范型会让代码越来越丑
Nazz
37 天前
在不适合的场景强上泛型
Dogtler
37 天前
至今没用过泛型。。用不太习惯
k1526783667
37 天前
@xianyukang 可以使用 interface 限制一下
type Base interface {
~int | ~string | ~map[string]string
}

func Test[T Base](t T) {
fmt.Println(t)
}

func main() {
Test("11")
}
kaf
37 天前
官方有提到,泛型的推荐应用场景是你对输入和输出类型都明确的情况下
CloveAndCurrant
37 天前
没有太好的办法吧,要么不用泛型用 any ,要么用别名,rust 遇到这种问题也是用别名来解决
povsister
37 天前
你这是不适合用泛型的强上…. 灾难
Rickkkkkkk
37 天前
是应该用泛型的场景吗?
sampeng
37 天前
就这?看看 rust 的签名
FalconD
37 天前
@sampeng 我的 Rust 类型名字长达 3200 字符.webp
COW
37 天前
TS 的泛型好像更复杂。。。🤸‍♂️
realpg
36 天前
从来没用过泛型无所畏惧
chen05
36 天前
上范型就是坑,无法追踪代码错误
除非你输入明确类型,内部逻辑不复杂,并且输出类型单一

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1093602

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX