扩展运算符类似物

2024-01-01

我有一个结构体和该结构体的实例:

type Obj struct {
  ssid string
  code string
  mit string
  // and other props (23)
}

var ValidObject = Obj {
  ssid: "AK93-KADJ9-92J76",
  code: "SKO-120O"
  mit: "MSLA-923-OKSW"
}

我想创建一个结构体切片(Obj)其中将包含ValidObject仅更改了一些字段。我认为解释这一点的最好方法是使用伪代码,所以这里是(使用 JS 中的扩展运算符:)):

var slc = []Obj{
  {
    ...ValidObject,
    code: "Other value",
  },
  {
    ...ValidObject,
    mit: "Other value"
  }
}

创建一个辅助函数,它需要Object,改变其code并返回新的Object:

func withCode(obj Obj, code string) Obj {
    obj.code = code
    return obj
}

注意withCode采用非指针值,因此Object你的pass不会被修改,只是本地副本。

使用它你的任务是:

var slc = []Obj{
    withCode(ValidObject, "Other value"),
    withCode(ValidObject, "Yet another value"),
}
fmt.Println(slc)

输出(尝试一下去游乐场 https://play.golang.org/p/s2hq0qPBFxO):

[{AK93-KADJ9-92J76 Other value MSLA-923-OKSW}
    {AK93-KADJ9-92J76 Yet another value MSLA-923-OKSW}]

这个帮手withCode甚至可以是一种方法(而不是函数)。

请注意,如果您需要多个字段的变体,最好将它们添加为方法,以便您可以链接调用。

例如:

func (o Obj) withCode(code string) Obj {
    o.code = code
    return o
}

func (o Obj) withSsid(ssid string) Obj {
    o.ssid = ssid
    return o
}

func (o Obj) withMit(mit string) Obj {
    o.mit = mit
    return o
}

然后使用它:

var slc = []Obj{
    ValidObject.withCode("code2").withSsid("ssid2"),
    ValidObject.withMit("mit2").withSsid("ssid3"),
}
fmt.Println(slc)

输出(尝试一下去游乐场 https://play.golang.org/p/SL-VXhnHXyp):

[{ssid2 code2 MSLA-923-OKSW} {ssid3 SKO-120O mit2}]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展运算符类似物 的相关文章

  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 如何将字节块读入结构体

    我有一个需要处理的资源文件 它包含一组文件 首先 资源文件列出了其中包含的所有文件 以及一些其他数据 例如在此结构中 struct FileEntry byte Value1 char Filename 12 byte Value2 byt
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • SWIG Python C++ 结构作为输入/输出参数

    老实说 我在这个网站上读了很多关于struct主题 但我需要你的帮助 我有 C 风格的结构 struct Time uint16 t year year with four digits like 2016 uint8 t month 1
  • bazel go_embed_data“无法嵌入”

    我将以下 bazel BUILD 配置为 gazelle name gazelle go embed data name static files srcs glob static package main var staticFS go
  • 为什么 Go 中的函数不能命名为“init”?

    所以 今天在编码时我发现创建一个名为init产生错误method init not found 但是当我将其重命名为startup一切都很好 init 这个词是为 Go 中的某些内部操作而保留的 还是我在这里遗漏了一些东西 是的 该功能in
  • 结构大小与 typedef 版本不同?

    我的代码中有以下结构声明和 typedef struct blockHeaderStruct bool allocated unsigned int length typedef struct blockHeaderStruct block
  • 在 Go 中调用外部命令

    如何在GO中调用外部命令 我需要调用外部程序并等待它完成执行 在执行下一条语句之前 您需要使用执行包 http golang org pkg os exec 使用启动命令Command http golang org pkg os exec
  • 编译器会优化返回具有固定大小数组的结构的函数吗?

    假设我有一个struct在具有固定大小数组成员的 C C 中 例如 define SIZE 10000 struct foo int vector i SIZE float vector f SIZE 我想创建一个函数来返回一个实例foo
  • 为什么结构体的字段是“非名称”[重复]

    这个问题在这里已经有答案了 这段代码不起作用 它抱怨 j Bar 是一个 非名字 package main import fmt import os type foo struct Bar string Baz int func main
  • Go 算术中处理浮点数精度?

    我对 Go 中精确减去 2 个浮点数的方法感兴趣 我尝试过使用math big图书馆 但我无法得到准确的结果 我用过big js https github com MikeMcl big jsJavascript 库解决了这个问题 Go 算
  • 如何在 Docker 容器中持久保存 go 1.11 模块?

    我正在将 Go 1 10 应用程序迁移到 Go 1 11 这还包括从dep https golang github io dep to mod https github com golang go wiki Modules用于管理依赖关系
  • C++ 初始化列表的元素少于结构体

    当我使用初始值设定项列表创建结构体 但初始值设定项列表包含的元素少于我的结构体时 我看到其余元素均用零初始化 这是未定义的行为吗 我看到零是因为我的编译器 VS2015 决定为我将内存清零吗 或者有人可以向我指出解释 C 中这种行为的文档吗
  • 在Python中切片列表而不生成副本

    我有以下问题 给定一个整数列表L 我需要生成所有子列表L k for k in 0 len L 1 不生成副本 我如何在 Python 中完成这个任务 以某种方式使用缓冲区对象 简短的回答 对列表进行切片不会生成列表中对象的副本 它只是复制
  • 如何以编程方式检查类型是结构还是类?

    如何以编程方式检查类型是结构还是类 Use Type IsValueType http msdn microsoft com en us library system type isvaluetype aspx 获取一个值 该值指示 Typ
  • 如何退出执行延迟调用的 go 程序?

    我需要使用defer释放手动创建的分配C图书馆 但我还需要os Exit在某个时刻具有非 0 状态 棘手的部分是os Exit跳过任何延迟指令 package main import fmt import os func main defe
  • golang 将 big.Float 转换为 big.Int

    将big Float转换为big Int 我在下面编写代码 但它溢出了uint64 那么将big Float转换为big Int的正确方法是什么 package main import fmt import math big func Fl
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • 使用结构解析 YAML

    我创建了以下 YAML 文件来提供用户需要提供的一些配置 Environments sys1 models app type app1 service type fds app type app2 service type era sys2

随机推荐