在 Go 中考虑以下代码
type A struct {
f int
}
type B struct {
f int `somepkg:"somevalue"`
}
func f() {
var b *B = (*B)(&A{1}) // <-- THIS
fmt.Printf("%#v\n", b)
}
标记的行会导致内存副本(我想避免这种情况,因为 A 附加了许多字段)还是只是重新解释,类似于转换 int
到 uint
?编辑 :我担心是否必须复制整个结构,类似于将字节 slice 转换为字符串。因此,指针副本对我来说是无操作的
最佳答案
它被称为转换。表达式 (&A{})
创建一个指向 A
类型实例的指针, 和 (*B)
将该指针转换为 *B
.那里复制的是指针,而不是结构。您可以使用以下代码对此进行验证:
a:=A{}
var b *B = (*B)(&a)
b.f=2
fmt.Printf("%#v\n", a)
打印 2。
关于go - Go 中的类型转换结构是无操作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63016186/