我有这样的结构:
type User struct {
Id uint64
Email string
}
我知道,我可以这样声明:
user := User{
Id: 1,
Email: "test@example.com",
}
我可以这样更新:
user.Id = 2
user.Email = "test1@example.com"
是否可以使用类似的构造,例如用于更新 struct?
答案 0 :(得分:2)
不,确实没有等效的多属性设置器。
修改强>
可能有反射你可以做类似的事情:
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{})
中,但我通常会说复杂性不值得节省。只需要几行设置字段。
答案 1 :(得分:1)
它不一样,但您可以使用多值返回功能将它们设置为一行。
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"
}
答案 2 :(得分:0)
你的意思是这样吗?
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)
}