Golang pointer

Golang pointer

  • 指针,保存了变量的内存地址,可以让不同的变量共享同一片内存
    • 在使用 goroute 去程并发编程时,要管理好共享的内存,避免冲突。

      • slice 也含有一个指向底层数组的指针

      • 不使用指针的类型是安全的,因为它们的变量在赋值时都会复制,不存在内存共享的问题。

          var i int
          var p *int
          var pp **int
          i = 0
          p = &i
          pp = &p
          *p++    // *p++ == (*p)++,++ 只能用于整数类型,是单独的语句
          fmt.Println(i, p, *p, pp, *pp)
        
    • 类型 *T 是指向类型 T值的指针;其初始值是 nil

            var p *int  // int 的指针类型
            var p **int // int 指针的指针类型
      
    • 生成指针变量 & 符号会生成一个指向其作用对象[变量]的指针

            // & 取变量的指针,&p 是变量 p 的指针
            & 是取值运算符,&s 表示 s 的地址,其中 s 是变量
            i := 42
            p = &i
      
    • 指针变量对应的变量的值 * 符号,表示指针指向的底层的值 - “间接引用”或“非直接引用”

            // * 取指针变量的值,*p 是变量 p 指向的值
            fmt.Println(*p) // 通过指针 p 读取 i
            *p = 21         // 通过指针 p 设置 i
      
    • 总结

            如同 k: v 结构中的 k - &, v - *
            key: value
            var i int
            var p *int
            p = &i  // key, 也就是开拓出来的内存空间
            *p = 21 // value, 也就是内存空间里的值
      

你可能感兴趣的:(Golang pointer)