是否可以在golang中使用质量分配?

时间:2017-05-04 19:35:15

标签: 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"

是否可以使用类似的构造,例如用于更新 struct?

3 个答案:

答案 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)
}

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