是否可以在 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)
}

https://play.golang.org/p/5-ME3p_JaV

不一样,但您可以使用多值 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"

}