go - Go 中的类型转换结构是无操作的吗?

标签 go casting

在 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 附加了许多字段)还是只是重新解释,类似于转换 intuint ?
编辑 :我担心是否必须复制整个结构,类似于将字节 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/

相关文章:

arrays - 在GO中解析json对象数组

sdl - 如何在 Windows 上构建 Go-SDL?

c++ - 重新解释没有类型标识符的强制转换 void

Java 多态性 : How can I avoid type casting input parameters?

c# - 为什么我的转换/转换失败?

go - 收到 "bytes.Buffer does not implement io.Writer"错误消息

docker - docker go-wrapper 脚本如何工作

Java 从 int 到 char 的转换表现得很奇怪

c# - 使用对象实例从 long 到 int 的泛型转换

go - 关于 golang 中的 `&MyType{}` 模式的任何文档/文章?