首页  >  文章  >  后端开发  >  如何在 Go 中转换结构:嵌入、手动复制或显式转换?

如何在 Go 中转换结构:嵌入、手动复制或显式转换?

Susan Sarandon
Susan Sarandon原创
2024-10-29 01:40:02666浏览

How to Convert a Struct in Go: Embedding, Manual Copying, or Explicit Conversion?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn