我在Go中有一个struct,它代表一个状态.现在,我希望能够比较两种状态(当前和所需),
假设"RestartedAfter"中的一个state字段.如果当前状态重启后大于所需状态
在这个例子中,我只使用一个字段,但由于我想迭代 struct 的所有字段(在下一步中),
type StateField[T any] interface {
AssertEqual(T) error
}
type RestartedAfter int
func (current RestartedAfter) AssertEqual(desired RestartedAfter) error {
if current >= desired {
return nil
}
return errors.New("current RestartedAfter happened before desired RestartedAfter")
}
func compareTwo[T any](x StateField[T], y T) error {
return x.AssertEqual(y) // panics
}
func main() {
r1 := RestartedAfter(1)
r2 := RestartedAfter(2)
err := compareTwo[RestartedAfter](r1, r2)
if err != nil {
os.Exit(1)
}
}
然而,这个例子令人panic .我收到以下信息:panic: interface conversion: main.StateField[go.shape.int_0] is main.RestartedAfter, not main.RestartedAfter (types from different scopes)
.
你知道怎么了吗?