zoukankan      html  css  js  c++  java
  • go指针:unsafe.Pointer

    Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确类型的对象,进行严格类型检查。下面的代码会产生编译错误 :

    package main
    import (
        "fmt"
    )
    func main() {
        u := uint32(32)
        i := int32(1)
        fmt.Println(&u, &i) // 打印出地址
        p := &i // p 的类型是 *int32
        p = &u // &u的类型是 *uint32,于 p 的类型不同,不能赋值    
        p = (*int32)(&u) // 这种类型转换语法也是无效的  
        fmt.Println(p)
    }
    

      

    unsafe 包提供的Pointer方法可以完成这个任务

    package main
    import (
        "fmt"
        "unsafe"
    )
    func main() {
        u := uint32(32)
        i := int32(1)
        fmt.Println(&u, &i)
        p := &i
        p = (*int32)(unsafe.Pointer(&u))
        fmt.Println(p)
    }
    

      

    注意:实际使用中unsafe可用场景很少,稍微复杂一点的结构,比如struct,unsafe根本不能适用

  • 相关阅读:
    oracle与DB2
    oracle ORA-01427: 单行子查询返回多个行
    mysql开发总结
    mysql show profile基本详解
    mysql批量插入数据
    mysql索引详解
    mysql性能调优
    MySQL优化
    mysql主从调优
    mysql主从复制
  • 原文地址:https://www.cnblogs.com/gwyy/p/13137967.html
Copyright © 2011-2022 走看看