我真的很困惑泛型的规则是如何工作的。我只是想让一个函数接受多种自定义类型,并且每种类型都有不同的逻辑。
type myObjOne struct { myfield string } type myObjTwo struct { myObjTwo myOtherField string } type Generic interface { myObjOne | myObjTwo } func derp[T Generic](c T) { switch any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
为什么 c.myfield
抛出 c.myfield 未定义(类型 T 没有字段或方法 myfield)compilerMissingFieldOrMethod
?
c
是类型 T
,而不是类型断言的结果。通过将类型断言的结果分配给变量来修复。
func derp[T Generic](c T) { switch c := any(c).(type) { case myObjOne: // I can't access the fields of my types like this c.myfield = "sdfsfsdfdsf" case myObjTwo: c.myOtherField = "sdfsfsdfdsf" } return }
此代码在类型开关中声明了第二个变量 c
。 c
的类型取决于交换机的分支。