我有一个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
超出注册的范围。
所以我有两个变量:req
和u
-每个结构一个。是否可以将req
结构分配给该u
结构,以便所有公共字段都将存在于该u
结构中?
使用简单分配,您不能这样做,因为即使的字段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
}
问题内容: 我对结构字段有疑问。 我已经创建了一个类与一种方法即增加或减少对象变量通过。另一种方法用于输出结果。 在一个新的实例与默认创建和,然后我打电话和。我希望在期间更改的值并产生,但它显示的是: 我的代码有什么问题? 问题答案: 您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递。
我有一个由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 中的结构字段分配默认值。我不确定这是否可能,但在创建/初始化结构的对象时,如果我不为字段分配任何值,我希望它从默认值分配。知道如何实现它吗?