为结构分配另一个结构

我有一个RegistrationRequest结构

type RegistrationRequest struct {

Email *string

Email2 *string

Username *string

Password *string

Name string

}

Email2再次在哪里输入电子邮件值,以验证用户输入的内容正确无误。

我也有一个用户结构:

type User struct {

Email *string

Username *string

Password *string

Name string

}

当然,没有必要存储Email2超出注册的范围。

所以我有两个变量:requ-每个结构一个。是否可以将req结构分配给该u结构,以便所有公共字段都将存在于该u结构中?

回答:

使用简单分配,您不能这样做,因为即使的字段User是的子集RegistrationRequest,它们也完全是2种不同的类型,并且可分配性规则不适用。

您可以编写一个使用反射(reflect包)的函数,并将所有字段从复制requ,但这很丑陋(且效率低下)。

最好是重构您的类型,并RegistrationRequest可以嵌入

User

如果您具有类型的值,则这样做RegistrationRequest意味着您也已经具有值User

type User struct {

Email *string

Username *string

Password *string

Name string

}

type RegistrationRequest struct {

User // Embedding User type

Email2 *string

}

func main() {

req := RegistrationRequest{}

s := "as@as.com"

req.Email = &s

s2 := "testuser"

req.Username = &s2

u := User{}

u = req.User

fmt.Println(*u.Username, *u.Email)

}

输出:(在Go Playground上尝试)

testuser as@as.com

另外请注意,由于您的结构包含指针,因此在复制时struct,将复制指针值而不是指针值。我不确定为什么在这里需要指针,最好将所有字段声明为非指针。

还要注意,嵌入并不是真正的要求,它只是使您的类型及其用法更加平滑。User也可能是的“普通”字段RequistrationRequest,例如:

type RegistrationRequest struct {

Usr User // This is just an ordinary field, not embedding

Email2 *string

}

以上是 为结构分配另一个结构 的全部内容, 来源链接: utcz.com/qa/400653.html

回到顶部