关于golang中强制类型转换,原生指针的使用
Golang中如何进行类型转换,也正好可以探究下golang的内存布局
package main
import (
"fmt"
)
type A struct {
name string
age int8
}
type B struct {
notname string
notage int8
sex int8
}
func main() {
b := &B{notname: "我是B", notage: 90, sex: 1}
a := (*A)(b)//这是编译不通过,可以接着看下面的代码
fmt.Println(a.name)
}
上面的代码是通不过编译的
./typecast.go:20: cannot convert b (type *B) to type *A
那么如何进行类型的强制类型转换呢?
package main
import (
"fmt"
"unsafe"
)
type A struct {
name string
age int8
}
type B struct {
notname string
notage int8
sex int8
}
func main() {
b := &B{notname: "我是B", notage: 90, sex: 1}
a := (*A)(unsafe.Pointer(b))
fmt.Println(a.name)
}
这样就能通过类型转换了。可以看到只要类型的内存布局一致就可以了,即使B类型多一个sex字段。
这样的转换方式是通过原生指针的方式进行转换的。

浙公网安备 33010602011771号