当一个结构包含另一个时,如何在 Go 中将一个结构转换为另一个?

emi*_*mil 5 struct go

我想知道当一个结构包含另一个结构时,是否有一种简单的方法可以在 Go 中将一个结构转换为另一个。

例如

type Type1 struct {
  Field1 int
  Field2 string
}

type Type2 struct {
  Field1 int
}
Run Code Online (Sandbox Code Playgroud)

我知道可以这样处理

var a Type1{10, "A"}
var b Type2
b.Field1 = a.Field1
Run Code Online (Sandbox Code Playgroud)

但是如果有很多领域,我将不得不写很多作业。有没有其他方法可以在没有多次分配的情况下处理它?

总之,b = _.omit(a, 'Field2')在javascript中有没有类似的东西?

Adr*_*ian 5

不直接,不。您只能在相同类型之间自由转换。

您可以获得针对此类问题的各种级别的解决方案:

  • 自己写作业(可能是最好的表现)
  • 使用反射根据字段名称从一个复制到另一个
  • 一些快速而肮脏的事情,例如将一种类型编组为 JSON,然后解组为另一种类型(这基本上是在引擎盖下使用带有明文中间人的反射,因此效率更低,但您只需做很少的工作即可完成)