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。谢谢这是我的工作。非常感谢你。