为了账号安全,请及时绑定邮箱和手机立即绑定

go 中无效的内存地址或 nil 指针取消引用

go 中无效的内存地址或 nil 指针取消引用

Go
慕容森 2022-05-05 16:15:17
我是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"))}当我运行这段代码时。错误显示错误“无效的内存地址或零指针取消引用”。如何修复我的代码。供您参考,IUser interface必须包含在用户结构中
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

当你用 初始化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 Go或Go by Example以更好地理解接口基础知识。


查看完整回答
反对 回复 2022-05-05
  • 1 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信