The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
xianyukang

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

  •  
  •   xianyukang · Nov 29, 2024 · 3409 views
    This topic created in 531 days ago, the information mentioned may be changed or developed.

    问题背景:

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

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

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

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

    那些基础库, 例如数学的不同类型的, 或者涉及数组或 map 之类的容器遍历的, 用范型能简化代码
    其他不必要性的场景, 硬上范型就是坑队友了
    滥用范型会让代码越来越丑
    Nazz
        8
    Nazz  
       Nov 29, 2024   ❤️ 1
    在不适合的场景强上泛型
    Dogtler
        9
    Dogtler  
       Nov 29, 2024
    至今没用过泛型。。用不太习惯
    kratos123
        10
    kratos123  
       Nov 29, 2024
    @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  
       Nov 29, 2024   ❤️ 1
    官方有提到,泛型的推荐应用场景是你对输入和输出类型都明确的情况下
    CloveAndCurrant
        12
    CloveAndCurrant  
       Nov 29, 2024
    没有太好的办法吧,要么不用泛型用 any ,要么用别名,rust 遇到这种问题也是用别名来解决
    povsister
        13
    povsister  
       Nov 29, 2024 via iPhone
    你这是不适合用泛型的强上…. 灾难
    Rickkkkkkk
        14
    Rickkkkkkk  
       Nov 29, 2024
    是应该用泛型的场景吗?
    sampeng
        15
    sampeng  
       Nov 29, 2024
    就这?看看 rust 的签名
    FalconD
        16
    FalconD  
       Nov 29, 2024 via Android
    @sampeng 我的 Rust 类型名字长达 3200 字符.webp
    COW
        17
    COW  
       Nov 29, 2024 via Android
    TS 的泛型好像更复杂。。。🤸‍♂️
    realpg
        18
    realpg  
    PRO
       Nov 30, 2024
    从来没用过泛型无所畏惧
    iShinku
        19
    iShinku  
       Nov 30, 2024
    上范型就是坑,无法追踪代码错误
    除非你输入明确类型,内部逻辑不复杂,并且输出类型单一
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1040 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 22:35 · PVG 06:35 · LAX 15:35 · JFK 18:35
    ♥ Do have faith in what you're doing.