You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言如何创建并初始化可适配多类型的泛型结构体

Go 泛型 SafeSet 实现方案

你现有代码的问题有两处:

  1. Go 泛型的类型参数声明不需要额外加type关键字前缀
  2. 作为 map 键的泛型类型必须添加comparable约束(map 要求键类型支持相等/不等比较)

正确的结构体定义

type SafeSet[T comparable] struct {
    Values map[T]bool
}

初始化写法

你需要在结构体名后显式指定具体的类型参数,即可实现不同类型的初始化:

// 键为 net.Conn 类型
SafeSet[net.Conn]{ Values: make(map[net.Conn]bool) }
// 键为 string 类型
SafeSet[string]{ Values: make(map[string]bool) }
// 键为 int 类型
SafeSet[int]{ Values: make(map[int]bool) }

简化初始化的可选方案

可以额外实现一个泛型构造函数,减少重复代码:

func NewSafeSet[T comparable]() SafeSet[T] {
    return SafeSet[T]{
        Values: make(map[T]bool),
    }
}

使用时可以直接调用构造函数,部分场景下编译器还能自动完成类型推断:

// 显式指定类型
intSet := NewSafeSet[int]()
// 赋值给带类型的变量时可省略类型参数,由编译器推断
var connSet SafeSet[net.Conn] = NewSafeSet()

内容的提问来源于stack exchange,提问作者Sebastian Nielsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:21:02