Go接口属性未定义

Tay*_*ebK -2 struct go

我有一个特定的问题,我需要一个可以采用一个或另一个结构的值的变量。我用一个具有接口值的用户字段创建一个userResp结构,但是如果我添加一个函数来返回名为Password的用户的子属性,则会返回错误。user的值将是具有Password属性的结构。

结构:

type userResp struct {
  user interface{}
}
Run Code Online (Sandbox Code Playgroud)

功能

func (ur *userResp) password() string {
  return ur.user.Password
}
Run Code Online (Sandbox Code Playgroud)

我得到了,ur.user.Password undefined (type interface {} is interface with no methods)但是界面user可以是带有Password字段的Admin或User结构。

任何想法如何执行此操作,我需要使用用户或admin的结构并将其返回。

我不能使用2个函数,因为两种情况下的逻辑都是相同的。我需要用户或管理员的整个结构

And*_*eig 5

这里有两个问题:

您无法在空接口(interface{})上调用方法,因为空接口未定义任何方法。

您不能通过接口类型仅通过方法来引用字段。

您需要确定设置为的值user应具有的行为,并定义一个接口以反映该行为。例如,如果您需要用户能够做的唯一事情就是提供密码,则界面将是

type User interface {
    Password() string
}
Run Code Online (Sandbox Code Playgroud)

您的结构将是

type userResp struct {
  user User
}
Run Code Online (Sandbox Code Playgroud)

然后,您将返回如下密码:

return ur.user.Password()
Run Code Online (Sandbox Code Playgroud)

无论您要存储在user字段中的任何类型,都必须在Password其上定义方法,以便它们满足User接口