Когда вы инициализируете User
с помощью {}
, вы не инициализируете ни один из его элементов (в данном случае Yy
), что означает, что все они имеют значения по умолчанию. Значением по умолчанию для интерфейсов является nil
.
. Вам нужно передать экземпляр типа, который реализует IUser
, для инициализации Yy
, но вы не объявили никаких реализующих типов в своем коде.
Вот простой пример с типом MySQLUser
, который реализует IUser
. Обратите внимание, как Yy
инициализируется.
type IUser interface {
GetUser(name string) string
}
// MySQLUser implements IUser
type MySQLUser struct {
}
func (u MySQLUser) GetUser(name string) string {
return name
}
type User struct {
Yy IUser
}
func main() {
u := User{Yy: MySQLUser{}} // pass initialised IUser implementation
fmt.Println(u.Yy.GetUser("bambang"))
}
Вы, вероятно, должны рассмотреть Тур по Go или Go по Примеру , чтобы лучше понять основы интерфейса.