go指针-1

go 中的指针-1

原文地址

go的指针类似C指针,都是一个指向其他值的值。这是一个十分重要的概率,并且它不应该被认为是危险且无法判断的。

在go中的指针有几个相比于C/C++改善的地方:

  1. 没有指针运算,你不能在go中这样写

    var p *int
    p++
    

    也就是你不能更改指针p指向的地址,除非你给它赋值其他地址。

  2. 这意味这在go中没有指针数列。

  3. 一旦一个值被赋予一个指针了,除了nil这种特殊的情况,go保证被指向的对象在指针的生命周期内都有效。因此:

    func f() *int { 
            i := 1
            return &i
    }
    

    这段代码在go中是安全的,编译器将会安排一块内存地址给变量i使得在f()返回后有效。

  4. 空指针,在go中你仍可以将指针指向空值以及因空指针而引起的panic,但与Java不同,在Java中因空指针而报错的情况在go中并不存在。我认为有以下三个原因

    1. 多返回值,空值不在是被作为错误情况的标记。很明显,这留下了程序员不检查错误的问题,但是这只是一个习惯问题。

    2. String是值类型,而不是指针,我认为,在像Java和C++中,空指针异常情况是最多的。

      var s string
      

      在上面这段代码中,s的默认空值是"",而不是nil

    3. 事实上,大多内置的数据类型,maps,slices,channels和arrays都有一个合理的默认值,如果他们没有被初始化。

猜你喜欢

转载自www.cnblogs.com/Jun10ng/p/12716382.html