是否可以在 golang 中使用批量赋值?
Is it possible to use mass assignment in golang?
我有这样的结构:
type User struct {
Id uint64
Email string
}
我知道,我可以这样声明:
user := User{
Id: 1,
Email: "test@example.com",
}
我可以这样更新它:
user.Id = 2
user.Email = "test1@example.com"
是否可以使用类似于创建的类似构造,但用于 更新 结构?
不,确实没有等效的多属性 setter。
编辑:
也许通过反思你可以做这样的事情:
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)
}
不一样,但您可以使用多值 return 功能将它们设置在一行中。
https://play.golang.org/p/SGuOhdJieW
package main
import (
"fmt"
)
type User struct {
Id uint64
Email string
Name string
}
func main() {
user := User{
Id: 1,
Email: "test@example.com",
Name: "Peter",
}
fmt.Println(user)
user.Id, user.Email = 2, "also-test@example.com"
fmt.Println(user) // user.Name = "Peter"
}
我有这样的结构:
type User struct {
Id uint64
Email string
}
我知道,我可以这样声明:
user := User{
Id: 1,
Email: "test@example.com",
}
我可以这样更新它:
user.Id = 2
user.Email = "test1@example.com"
是否可以使用类似于创建的类似构造,但用于 更新 结构?
不,确实没有等效的多属性 setter。
编辑:
也许通过反思你可以做这样的事情:
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)
}
不一样,但您可以使用多值 return 功能将它们设置在一行中。
https://play.golang.org/p/SGuOhdJieW
package main
import (
"fmt"
)
type User struct {
Id uint64
Email string
Name string
}
func main() {
user := User{
Id: 1,
Email: "test@example.com",
Name: "Peter",
}
fmt.Println(user)
user.Id, user.Email = 2, "also-test@example.com"
fmt.Println(user) // user.Name = "Peter"
}