неверный адрес памяти или разыменование нулевого указателя в go - PullRequest
0 голосов
/ 14 января 2020

Я новичок в 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"))
}

, когда я запускаю этот код. error show error "неверный адрес памяти или разыменование нулевого указателя". как исправить мой код. для вашей информации IUser interface должен включать в структуру пользователя

1 Ответ

1 голос
/ 14 января 2020

Когда вы инициализируете 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"))
}

Вы, вероятно, должны рассмотреть Тур по Go или Go по Примеру , чтобы лучше понять основы интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...