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

5
我想知道在Go语言中,是否有一种简单的方式可以将包含另一个结构体的结构体转换为另外一个结构体。
例如:
type Type1 struct {
  Field1 int
  Field2 string
}

type Type2 struct {
  Field1 int
}

我知道可以这样处理:

我知道可以这样处理

var a Type1{10, "A"}
var b Type2
b.Field1 = a.Field1

如果有很多字段的话,我将不得不写大量的赋值语句。是否有其他方法可以处理它而不需要多个赋值语句?
总之,在JavaScript中是否有像b = _.omit(a, 'Field2')这样的东西?

如果不违背设计,考虑将“Type 2”嵌入“Type 1”中。 - leaf bebop
1个回答

5

不可以直接转换,只能在类型相同的情况下自由转换。

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

  • 手动编写赋值代码(可能是最佳性能的方法)
  • 使用反射根据字段名称从一个对象复制到另一个对象
  • 采用快速简单的方式,例如将一种类型转换为JSON,然后再将其转换为另一种类型(基本上是在中间加入了明文传输的反射,因此效率更低,但您无需付出太多努力即可完成)

谢谢你的回答。我无法将其编码/解码为JSON,因为它已经有了其他目的的JSON标签。你能详细说明一下反射吗? - emil
@emil 这里有一个使用 reflect 包的示例:https://play.golang.org/p/JkZ5Hi_Xyxw。这只是一个使用反射的演示,它省略了适当的值有效性检查,因此我不建议直接使用它。 - mkopriva

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接