我是golang的新手。我的代码有问题。
这是我的代码看起来像


type IUser interface {
    GetUser(name string) string
}

func GetUser(name string) string {
    return name
}

type User struct {
    Yy IUser
}

func main() {
    u := User{}
    fmt.Println(u.Yy.GetUser("bambang"))
}

当我运行此代码。错误显示错误“无效的内存地址或nil指针取消引用”。
如何修复我的代码。对于您的信息,IUser interface必须包含在User struct中

最佳答案

当您使用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"))
}

您可能应该复习A Tour of GoGo by Example以更好地了解界面基础知识。

08-18 11:34