Go 使用接口设置混凝土结构的值

Go 使用接口设置混凝土结构的值,go,Go,我试图在一个具体的结构中设置一个属性的值,使用一个使用该结构并由该结构实现的接口的方法。该结构也由另一个结构组成 对于下面的示例,userId值保持aaaa,并且不会更新为userid1 如何通过作为参数的方法接口和作为参数的结构更新结构的值 func main() { user:=User{} mw:=SomeMiddleware{} user.UserId="aaaa" mw.Process(user) fmt.Println("UserId:

我试图在一个具体的结构中设置一个属性的值,使用一个使用该结构并由该结构实现的接口的方法。该结构也由另一个结构组成

对于下面的示例,userId值保持aaaa,并且不会更新为userid1

如何通过作为参数的方法接口和作为参数的结构更新结构的值

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
}

你可以使用这样的指针

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
}