当前位置: 首页 > 面试题库 >

为结构分配另一个结构

冷越泽
2023-03-14
问题内容

我有一个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
}


 类似资料:
  • 问题内容: 我对结构字段有疑问。 我已经创建了一个类与一种方法即增加或减少对象变量通过。另一种方法用于输出结果。 在一个新的实例与默认创建和,然后我打电话和。我希望在期间更改的值并产生,但它显示的是: 我的代码有什么问题? 问题答案: 您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递。

  • 我有一个由3个orgs和两个频道组成的网络。

  • 问题内容: 如果我的猜测正确的话,我可能会遇到结构问题,可能还会遇到指针问题。 该结构具有一些字段和一个包含切片的字段: 这看起来是这样的: 我的问题是将的值更改为。 有一个监听连接的方法: 并且是无法正常工作的部分,该方法如下所示: 这实际上被执行了,所以连接没有得到响应或其他问题不是问题。 但是,如果以后尝试使用的方法来遍历它,则总是出于某种原因(默认设置)。 我想我正在使用的是原始连接的副本

  • 问题内容: 假设,我运行一个API,并且当用户在用户资源上发出GET请求时,我将以JSON的形式返回相关字段 如您所见,User中的Secret字段具有。这意味着在大多数操作中,我都不想返回。在这种情况下,响应将是 忽略该字段将不会返回该字段机密。 现在,我将打开一个我想返回秘密字段的管理员专用路由。但是,这将意味着复制User结构。 我当前的解决方案如下所示: 有没有一种方法可以将User嵌入a

  • 3.2.1 配置结构 当默认的工程结构不适用的时候,你可能需要配置它。根据 Gradle 文档说明,可以通过如下方式重新配置Java工程的 sourceSets: sourceSets { main { java { srcDir 'src/java' } resources { srcDir

  • 我想为 Go 中的结构字段分配默认值。我不确定这是否可能,但在创建/初始化结构的对象时,如果我不为字段分配任何值,我希望它从默认值分配。知道如何实现它吗?