首页 > 解决方案 > 修改结构

问题描述

我有一个结构,例如

type Info struct {
    Foo         string
    FooBar      string
    Services    string
    Clown       string
}

假设我已经填充了前两个字段

input := &Info{
   Foo: "true",
   Services: "Massage",
}

有没有办法“重新打开”结构以添加缺失的元素。像这样的东西:

input = {
   input,
   Foobar: "Spaghetti",
   Clown: "Carroussel"
}

代替

input.Foobar = "Spaghetti"
input.Clown = "Carroussel"

我有多个字段,只是不太喜欢有很多行 input.Fields。我没有找到类似的东西。所以我想知道。

标签: gostructcomposite-literals

解决方案


不,该语言的语法不支持这一点。

顺便说一句,您要避免的解决方案包含比理论替代方案更少的行:)(在您的示例中为 2 行与 4 行)。

可以创建一个辅助函数,将非零字段从结构的一个实例复制到另一个,因此您可以使用复合文字创建具有附加字段的结构并将其用作源,但这需要使用反射,即慢,而且这个解决方案不会更具可读性。

请参阅相关:“合并”字段两个相同类型的结构


推荐阅读