V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xianyukang
V2EX  ›  Go 编程语言

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

  •  
  •   xianyukang · 12 天前 · 1911 次点击

    问题背景:

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

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

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

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

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

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

    func main() {
    Test("11")
    }
    kaf
        11
    kaf  
       12 天前   ❤️ 1
    官方有提到,泛型的推荐应用场景是你对输入和输出类型都明确的情况下
    CloveAndCurrant
        12
    CloveAndCurrant  
       12 天前
    没有太好的办法吧,要么不用泛型用 any ,要么用别名,rust 遇到这种问题也是用别名来解决
    povsister
        13
    povsister  
       12 天前 via iPhone
    你这是不适合用泛型的强上…. 灾难
    Rickkkkkkk
        14
    Rickkkkkkk  
       12 天前
    是应该用泛型的场景吗?
    sampeng
        15
    sampeng  
       12 天前
    就这?看看 rust 的签名
    FalconD
        16
    FalconD  
       12 天前 via Android
    @sampeng 我的 Rust 类型名字长达 3200 字符.webp
    COW
        17
    COW  
       12 天前 via Android
    TS 的泛型好像更复杂。。。🤸‍♂️
    realpg
        18
    realpg  
       11 天前
    从来没用过泛型无所畏惧
    chen05
        19
    chen05  
       11 天前
    上范型就是坑,无法追踪代码错误
    除非你输入明确类型,内部逻辑不复杂,并且输出类型单一
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:45 · PVG 08:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.