Установка значений конкретной структуры с помощью интерфейса - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь установить значение свойства в конкретной структуре с помощью метода, который использует интерфейс, реализованный этой структурой.Структура также состоит из другой структуры.

В приведенном ниже примере значение userId остается "aaaa" и не обновляется до "userid1".

Как я могу обновить значения struct через интерфейс метода в качестве параметра и struct как аргумент?

func main() {

    user:=User{}

    mw:=SomeMiddleware{}
    user.UserId="aaaa"
    mw.Process(user)

    fmt.Println("UserId: " + user.UserId)
}

type IUser interface {
   SetUserId(string)
}

type SomeMiddleware struct {
}

func(m SomeMiddleware) Process(user IUser){
    user.SetUserId("userid1")
}


type User struct {
    UserInfo
}

type UserInfo struct {
    UserId string
}

func(ui UserInfo) SetUserId(userId string) {
    ui.UserId=userId
}

1 Ответ

1 голос
/ 06 апреля 2019

Вы можете использовать такие указатели,

package main

import (
    "fmt"
)

func main() {

    user := User{}

    mw := SomeMiddleware{}
    user.UserId = "aaaa"
    mw.Process(&user) // Send reference to user here (&user)

    fmt.Println("UserId: " + user.UserId)
}

type IUser interface {
    SetUserId(string)
}

type SomeMiddleware struct {
}

func (m *SomeMiddleware) Process(user IUser) { // Pointer receiver (m *SomeMiddleware)
    user.SetUserId("userid1")
}

type User struct {
    UserInfo
}

type UserInfo struct {
    UserId string
}

func (ui *UserInfo) SetUserId(userId string) {  // Pointer receiver (ui *UserInfo)
    ui.UserId = userId
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...