我有一个特定的问题,我需要一个可以采用一个或另一个结构的值的变量。我用一个具有接口值的用户字段创建一个userResp结构,但是如果我添加一个函数来返回名为Password的用户的子属性,则会返回错误。用户的值将是具有密码属性的结构。
结构:
type userResp struct {
user interface{}
}
功能
func (ur *userResp) password() string {
return ur.user.Password
}
我得到ur.user.Password undefined (type interface {} is interface with no methods)
,但是界面user
可以是具有Password
字段的Admin或User结构。
任何想法,我需要使用用户或admin的结构并将其返回。
我不能使用2个函数,因为两种情况下的逻辑是相同的。我需要User或Admin的整个结构
答案 0 :(得分:5)
这里有两个问题:
您不能在空接口(interface{}
)上调用方法,因为空接口没有定义方法。
您不能通过接口类型仅通过方法来引用字段。
您需要确定设置为user
的值应具有的行为,并定义一个反映该行为的接口。例如,如果您需要用户唯一能够做的就是提供密码,那么界面应该是
type User interface {
Password() string
}
您的结构将是
type userResp struct {
user User
}
然后您将返回如下密码:
return ur.user.Password()
无论您想存储在user
字段中的任何类型,都必须在其上定义Password
方法,以便它们满足User
接口