栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为结构分配另一个结构

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为结构分配另一个结构

使用简单分配,您不能这样做,因为即使的字段

User
是的子集
RegistrationRequest
,它们也完全是2种不同的类型,并且可分配性规则不适用。

您可以编写一个使用反射(

reflect
包)的函数,并将所有字段从复制
req
u
,但这很丑陋(且效率低下)。

最好是重构您的类型,并

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}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374662.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号