gpt4 book ai didi

go - 使用接口(interface)设置具体结构的值

转载 作者:数据小太阳 更新时间:2023-10-29 03:09:01 25 4
gpt4 key购买 nike

我正在尝试在具体结构中设置属性的值,使用该结构使用和接口(interface)实现的方法。该结构还由另一个结构组成。

在下面的示例中,userId 值仍然是“aaaa”并且不会更新为“userid1”。

如何通过方法接口(interface)作为参数并通过结构体作为参数来更新结构体的值?

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
}

关于go - 使用接口(interface)设置具体结构的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com