go 类型转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/harryhare/article/details/80348236

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
*/

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

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭