• 技术文章 >后端开发 >Golang

    golang有指针么

    青灯夜游青灯夜游2022-11-23 10:43:33原创116

    golang有指针。Go语言为程序员提供了控制数据结构指针的能力,其对指针的支持介于Java语言和C/C++语言之间,它既没有像Java那样取消了代码对指针的直接操作的能力,也避免了C/C++中由于对指针的滥用而造成的安全和可靠性问题。指针在Go语言中可被拆分为两个核心概念:1、类型指针,允许对这个指针类型的数据进行修改;2、切片,由指向起始元素的原始指针、元素数量和容量组成。

    php入门到就业线上直播课:进入学习

    本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

    与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。

    Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有像Java那样取消了代码对指针的直接操作的能力,也避免了C/C++中由于对指针的滥用而造成的安全和可靠性问题。

    指针(pointer)在Go语言中可以被拆分为两个核心概念:

    受益于这样的约束和拆分,Go语言的指针类型变量即拥有指针高效访问的特点,又不会发生指针偏移,从而避免了非法修改关键性数据的问题。同时,垃圾回收也比较容易对不会发生偏移的指针进行检索和回收。

    切片比原始指针具备更强大的特性,而且更为安全。切片在发生越界时,运行时会报出宕机,并打出堆栈,而原始指针只会崩溃。

    golang中什么是指针?

    指针是一个变量,其值是另一个变量的地址,即存储器位置的直接地址。类似变量或常量一样,必须要先声明一个指针,然后才能使用它来存储任何变量地址。指针变量声明的一般形式是:

    var var-name *var-type

    这里,var-type是指针的基类型; 它必须是有效的Go数据类型,var-name是指针变量的名称。用于声明指针的星号(*)与用于乘法的星号相同。但是,在此语句中,星号(*)用于将变量指定为指针。以下是有效的指针声明:

    var ip *int        /* pointer to an integer */
    var fp *float32    /* pointer to a float */

    所有指针的值的实际数据类型(无论是整数,浮点数还是其他数据类型)都是相同的,它表示内存地址的长十六进制数。不同数据类型的指针的唯一区别是指针所指向的是变量或常量的数据类型。【相关推荐:Go视频教程

    如何使用指针?

    有几个重要的操作,将非常频繁地使用指针来实现。

    这是通过使用一元运算符*来返回位于操作数指定的地址的变量的值。下面的例子使用这些操作:

    package main
    
    import "fmt"
    
    func main() {
       var a int= 20   /* actual variable declaration */
       var ip *int        /* pointer variable declaration */
    
       ip = &a  /* store address of a in pointer variable*/
    
       fmt.Printf("Address of a variable: %x\n", &a  )
    
       /* address stored in pointer variable */
       fmt.Printf("Address stored in ip variable: %x\n", ip )
    
       /* access the value using the pointer */
       fmt.Printf("Value of *ip variable: %d\n", *ip )
    }

    当上面的代码编译和执行时,它产生结果如下:

    Address of var variable: 10328000
    Address stored in ip variable: 10328000
    Value of *ip variable: 20

    在Go语言中的nil指针

    Go编译器为指针变量分配一个Nil值,以防指针没有确切的地址分配。这是在变量声明的时候完成的。指定为nil值的指针称为nil指针。

    nil指针是在几个标准库中定义的值为零的常量。参考下面的程序:

    package main
    
    import "fmt"
    
    func main() {
       var  ptr *int
    
       fmt.Printf("The value of ptr is : %x\n", ptr  )
    }

    当上面的代码编译和执行时,它产生结果如下:

    The value of ptr is 0

    在大多数操作系统上,程序不允许访问地址0处的内存,因为该内存是由操作系统保留的。 然而,存储器地址0具有特殊意义;它表示指针不打算指向可访问的存储器位置。但是按照惯例,如果指针包含nil(零)值,则假设它不指向任何东西。

    要检查是否为nil指针,可以使用if语句,如下所示:

    if(ptr != nil)     /* succeeds if p is not nil */
    if(ptr == nil)    /* succeeds if p is null */

    更多编程相关知识,请访问:编程视频!!

    以上就是golang有指针么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:Golang go语言 Go
    上一篇:go就是golang吗 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 一文搞懂GO中的单元测试(unit testing)• Go语言中的for循环有多坑?• Python Django的模型建立与操作(实例详解)• 聊聊Golang自带的HttpClient超时机制• Golang字符串类型怎么就不能修改?• 一文浅析Golang中的闭包
    1/1

    PHP中文网