Go中的结构体转换
考虑以下两个结构体:
type A struct { a int b string } type B struct { A c string }
假设你有一个A类型的变量,想将其转换为B类型,这在Go中可行吗,还是需要手动复制字段或者创建显式转换方法?
方法 1:嵌入结构赋值
正如您在问题中提到的,嵌入可以用于此目的。通过将 A 嵌入到 B 中,只需将 A 类型的变量分配给嵌入字段即可将其转换为 B 类型。例如:
func main() { structA := A{a: 42, b: "foo"} structB := B{A: structA} // Embed structA into structB }
此方法创建 B 的新实例,其中在其嵌入字段中包含来自 A 的数据。
方法 2:手动字段复制
或者,您可以手动将字段从 A 复制到 B,如下所示:
func main() { structA := A{a: 42, b: "foo"} structB := B{ A: structA, // Copy fields from structA c: "bar", } }
此方法涉及创建 B 的新实例并手动分配 A 中的字段。
方法 3:显式转换方法
另一个选项是创建一个将 A 转换为 B 的显式转换方法。如果您有复杂的转换逻辑,这可能会很有用。但是,在这种情况下,这种方法不是必需的,因为上述方法提供了一种实现所需转换的直接方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3