无效的内存地址或空指针取消引用

问题描述 投票:0回答:1

我是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必须包含在用户结构中

go
1个回答
0
投票

User初始化{}时,您没有初始化其任何成员(在这种情况下为Yy),这意味着它们都具有默认值。接口的默认值为nil

您需要传入实现IUser的类型的实例以初始化Yy,但是您尚未在代码中声明任何实现类型。

这是一个简单的示例,其中带有实现MySQLUserIUser类型。注意如何初始化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以更好地了解界面基础知识。

© www.soinside.com 2019 - 2024. All rights reserved.