我有两个结构体
type A struct {
a int
b string
}
type B struct {
A
c string
// more fields
}
我想将类型为A的变量转换为类型B(A只定义了一些关键基本字段,而B则包含“完整”数据)。
在Go中是否有可能进行此操作,还是我必须手动复制字段(或创建A.GetB()方法之类的方法,并使用它来将A转换为B)?
我有两个结构体
type A struct {
a int
b string
}
type B struct {
A
c string
// more fields
}
我想将类型为A的变量转换为类型B(A只定义了一些关键基本字段,而B则包含“完整”数据)。
在Go中是否有可能进行此操作,还是我必须手动复制字段(或创建A.GetB()方法之类的方法,并使用它来将A转换为B)?
func main() {
// create structA of type A
structA := A{a: 42, b: "foo"}
// convert to type B
structB := B{A: structA}
}
A
和 B
具有不同的基础类型,因此它们无法相互转换。没有办法。unsafe.Pointer
,因为类型为 A
的值与类型为 B
的值具有不同的内存布局。B
的大小比 A
的大小要大,所以在将 *A
用作 *B
后,通过更改 B.c
字段,您可能会覆盖属于其他变量甚至包含代码的内存。无论如何都不要这样做! - icza