【发布时间】:2017-08-11 21:27:48
【问题描述】:
我想创建一个必须方法的基本结构,我想在子结构中使用这些方法。例如:
type Base struct {
Type string `json:"$type"`
}
func (b Base) GetJSON() ([]byte, error) {
return json.Marshal(b)
}
func (b Base) SetType(typeStr string) interface{} {
b.Type = typeStr
return b
}
在新结构中我想这样使用它:
type Auth struct {
Base
Username
Password
}
并在main中调用这些方法:
func main() {
a := Auth{
Username: "Test",
Password: "test",
}
a = a.SetType("testtype").(Auth)
j, _ := a.GetJSON()
}
在 SetType 的情况下,我得到一个由 interface{} 引起的恐慌不是Auth 类型,而是Base 类型。
在 GetJSON 案例中,我得到了一个关于类型的 json,但只有类型。
我想解决的问题有什么解决办法吗?
【问题讨论】:
-
return b.Type = typeStr不是有效的 Go 语句。如果您正在尝试这样做,则 Base 不会有Username和Password字段。 Go 中没有继承。 -
我建议您完全从 Go 的角度重新思考您的设计。 Go 不是面向对象的语言。它没有继承,也没有接口之外的多态性。
-
是的,我知道,但是人们如何解决给定的问题,我有 359 个结构都使用相同的方法,我应该把它们写给所有人吗?
-
@JimB 我修好了
-
@PumpkinSeed:为什么它需要基于方法?大多数时候,人们会创建采用已定义接口的函数。大量重复代码的另一种解决方案当然是代码生成。
标签: go struct static-typing