例如,我定义了以下接口:
type MyTypeConstraint interface {
~int | ~string
}
除了使用switch reflect.TypeOf(v)
语句将值与MyTypeConstraint
内的每个类型进行比较之外,有没有一种方法可以判断给定值是否满足这个约束?例如,这里我不希望用户将不满足约束的类型传递给函数v
:
type ErrNode struct {
Data map[string]interface{}
// Err error -- irrelevant
// next *ErrNode -- irrelevant
}
// `GetData()` is constrained but `Set()` is not.
// Of course I could pass `ErrNode` as parameter into `Set()`
// like bellow but then I won't be able to chain `Set()` calls.
func GetData[T ErrData](list *ErrNode, k string) (v T, ok bool) {
v, ok = list.Data[k].(T)
return v, ok
}
func (e *ErrNode) Set(k string, v interface{}) (self *ErrNode) {
e.Data[k] = v // v must be of type listed in `MyTypeConstraint`
return e
}