1 回答

TA贡献1873条经验 获得超9个赞
您无法在当前的 Go 版本 1.17 中执行此操作。不幸的是,没有别的可说的了。
在泛型将被添加到语言中之后,可能在Go 1.18(2022年初)中,根据当前接受的提案,这种参数化类型的语法将是:
type SafeSet[T comparable] struct {
Values map[T]bool
}
特别:
类型约束位于类型名称之后T
如果要用作映射键,则必须使用内置约束 ,因为映射键必须具有可比性,即支持运算符。Tcomparable==
然后,您必须使用实际类型参数实例化类型:
例:
若要使用泛型类型,必须提供类型参数。这称为实例化。像往常一样,类型参数显示在方括号中。当我们通过为类型参数提供类型参数来实例化类型时,我们将生成一个类型,其中类型定义中类型参数的每次使用都将替换为相应的类型参数。
s0 := SafeSet[net.Conn]{Values: make(map[net.Conn]bool)}
s1 := SafeSet[string]{Values: make(map[string]bool)}
s2 := SafeSet[int]{Values: make(map[int]bool)}
由于实例化文本看起来有点冗长,因此您可以使用泛型构造函数 func:SafeSet
func NewSafeSet[T comparable]() SafeSet[T] {
return SafeSet[T]{Values: make(map[T]bool)}
}
显然,语法是相同的,除了在这种情况下,您使用arg类型显式实例化函数:
s3 := NewSafeSet[uint64]()
s3.Values[200] = true
戈蒂普 游乐场: https://gotipplay.golang.org/p/Qyd6zTLdkRn
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报