可以在golang使用质量分配吗?
我的结构如下所示:可以在golang使用质量分配吗?,go,struct,types,variable-assignment,mass-assignment,Go,Struct,Types,Variable Assignment,Mass Assignment,我的结构如下所示: type User struct { Id uint64 Email string } user := User{ Id: 1, Email: "test@example.com", } user.Id = 2 user.Email = "test1@example.com" 我知道,我可以这样声明: type User struct { Id uint64 Email string } user := User{
type User struct {
Id uint64
Email string
}
user := User{
Id: 1,
Email: "test@example.com",
}
user.Id = 2
user.Email = "test1@example.com"
我知道,我可以这样声明:
type User struct {
Id uint64
Email string
}
user := User{
Id: 1,
Email: "test@example.com",
}
user.Id = 2
user.Email = "test1@example.com"
我可以这样更新它:
type User struct {
Id uint64
Email string
}
user := User{
Id: 1,
Email: "test@example.com",
}
user.Id = 2
user.Email = "test1@example.com"
是否可以使用类似的构造,如用于创建但用于更新结构?不,实际上没有等效的多属性设置器 编辑: 可能通过反射,您可以执行以下操作:
updates := user := User{
Email: "newemail@example.com",
}
//via reflection (pseudo code)
for each field in target object {
if updates.field is not zero value{
set target.field = updates.field
}
}
反射部分可以分解成一个函数
updateFields(dst,src interface{})
,但我通常认为这种复杂性不值得节省。只需要一行一行地设置字段。不,实际上没有等效的多属性设置器
编辑:
可能通过反射,您可以执行以下操作:
updates := user := User{
Email: "newemail@example.com",
}
//via reflection (pseudo code)
for each field in target object {
if updates.field is not zero value{
set target.field = updates.field
}
}
反射部分可以分解成一个函数updateFields(dst,src interface{})
,但我通常认为这种复杂性不值得节省。只要有几行设置字段就可以了。你的意思是这样吗
package main
import (
"fmt"
)
type User struct {
Id uint64
Email string
}
func main() {
user := User{
Id: 1,
Email: "test@example.com",
}
fmt.Println(user)
user = User{
Id: 2,
Email: "also-test@example.com",
}
fmt.Println(user)
}
你是说像这样吗
package main
import (
"fmt"
)
type User struct {
Id uint64
Email string
}
func main() {
user := User{
Id: 1,
Email: "test@example.com",
}
fmt.Println(user)
user = User{
Id: 2,
Email: "also-test@example.com",
}
fmt.Println(user)
}
这不一样,但您可以使用多值返回功能在一行中设置它们
这不一样,但是您可以使用多值返回功能在一行中设置它们
这可以通过反思来实现吗?例如,我有一个应该更新的字段列表,需要扔掉它并做一些事情。谢谢。我知道,它很难看,我真的不喜欢它。这是因为,我不知道如何避免它可以通过反思来实现吗?例如,我有一个应该更新的字段列表,需要扔掉它并做一些事情。谢谢。我知道,它很难看,我真的不喜欢它。这是因为,我不知道如何避免它。如果你添加
Name:user1.Name
@OleksandrSavchenko,你可以这样做吗?这不是你添加Name:user1.Name
@OleksandrSavchenko时所能做的事情吗?这不是你的问题!看起来不错,但是对于很多属性来说,它看起来很难看。你可以用一个函数来包装它。谢谢!看起来不错,但对于许多属性来说,它看起来很糟糕。您可以将其包装在函数中