Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
go中的内存地址无效或零指针取消引用_Go - Fatal编程技术网

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

go中的内存地址无效或零指针取消引用,go,Go,我是刚来戈兰的。我的代码有问题。 这是我的代码看起来像 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")) }

我是刚来戈兰的。我的代码有问题。 这是我的代码看起来像


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

当您使用
{}
初始化
用户
时,您没有初始化它的任何成员(
Yy
),这意味着它们都有默认值。接口的默认值为
nil

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

下面是一个简单的示例,其中包含一个实现
IUser
MySQLUser
类型。注意
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"))
}

您可能应该复习或更好地理解接口基础知识

u.Yy
未初始化。您必须创建一个实现
GetUser
函数的新类型,并将
u.Yy
初始化为该类型的实例。对不起,我不明白。如何进行编码。
GetUser
只是代码中的一个函数,而不是
User
的方法,因此
User
不实现
IUser
。也不要给你的接口命名
IType
——这会让你的代码看起来像C代码,而不是Go代码。另请参见,您应该从接口名称中删除
I
。围棋不是惯用语。试着想出一个代表interface.Ohhh用途的名称。OK。谢谢这是我的工作。非常感谢你。