我有多个从字符串派生的枚举,它们共享一个公共的Validate()
方法(都不在我的控制范围之内).我想要一个泛型方法,将字符串转换为这些枚举,并在得到的枚举上调用Validate()
.我曾try 使用泛型来实现这一点,但由于各种原因失败了.
在下面的示例中,类型Constraint太强,无法调用Validate()
.我还try 使用Validate()
方法插入我自己的接口,并将其用作类型约束,但在类型转换部分失败了.
我如何在不修改枚举的情况下实现这一点?
package main
// imagine i have multiple of those types outside of my control
type FooStatusEnum string
func NewFooStatusEnum(value FooStatusEnum) *FooStatusEnum {
return &value
}
const (
FooStatusEnumA FooStatusEnum = "A"
FooStatusEnumB FooStatusEnum = "B"
FooStatusEnumC FooStatusEnum = "C"
)
func (m FooStatusEnum) Validate() error {
return nil
}
func stringToValidatedEnum[E ~string](s string) E {
e := E(s)
if err := e.Validate(); err != nil {
panic(1)
}
return e
}
func main() {
stringToValidatedEnum[FooStatusEnum]("A")
e := FooStatusEnum("A")
e.Validate()
}