我正在尝试在具体结构中设置属性的值,使用该结构使用和接口(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/