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 的显式转换方法。如果您有复杂的转换逻辑,这可能很有用。但是,在这种情况下,这种方法不是必需的,因为上述方法提供了一种实现所需转换的简单方法。
以上是如何在 Go 中转换结构:嵌入、手动复制或显式转换?的详细内容。更多信息请关注PHP中文网其他相关文章!