go 类型转换

https://www.linuxidc.com/Linux/2014-02/96095.htm

和c++不同的地方在于指针是无法强制转换的,除非用unsafe
这篇中有个类型强转后,访问私有成员的例子

func typeTest()  {
    var x int=10
    var px *int=&x
    fmt.Println(px)
    var y int32=int32(x)
    //var py *int32=(*int32)(px)//compile error
    //var py *int32=interface{}(px).(*int)//runtime error
    var py *int32=(*int32)(unsafe.Pointer(px))
    fmt.Println(y)
    fmt.Println(py)
    fmt.Println(*py)
    fmt.Println(strconv.IntSize)//go 中int的size 是由ARCH决定的,amd64下就是64位
    fmt.Println(runtime.GOARCH)


    //example of lost
    var t int=257
    var pt *int8=(*int8)(unsafe.Pointer(&t))
    fmt.Println(t)
    fmt.Println(*pt)
}
/*output
0xc420078288
10
0xc420078288
10
64
amd64
257
1
*/
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harryhare/article/details/80348236
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭