复制具有相同成员和变体类型的结构体
在 Go 中,具有相同成员但不同类型的结构体并不罕见。考虑以下示例:
type Common struct { Gender int From string To string } type Foo struct { Id string Name string Extra Common } type Bar struct { Id string Name string Extra Common }
给定 Foo 和 Bar 的实例,我们如何将数据从一个实例传输到另一个实例?
解决方案:转换
由于 Foo 和 Bar 的底层类型除了结构标签之外都是相同的,因此 Go 提供了一个简单的解决方案:转换。通过将 Foo 值转换为 Bar 类型,我们有效地覆盖了 Bar 中的现有数据。代码如下:
foo := Foo{Id: "123", Name: "Joe"} bar := Bar(foo)
示例
让我们在游乐场示例中测试转换: https://go.dev/play/p/1W3EXQVXVhS.
限制
值得注意的是,只有当基础类型相同(结构体除外)时,转换才有效标签。如果底层类型差异很大,则需要创建专用的复制函数。
以上是如何在成员相同但类型不同的 Go 结构体之间高效传输数据?的详细内容。更多信息请关注PHP中文网其他相关文章!