go指针续笔记

115 阅读2分钟

「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。

0 环境

1 操作指针

操作指针的目的:对指针的指向值,获取指向值或对指向值进行修改。获取指向值的写法:*后面加上指针变量。

2 指针参数

如下函数:可以看出假如我直接传参的,其实只是值的一份拷贝,如果你真想要这个值,只能return回去。而我直接通过&变量地址,*类型接收,重新赋值即可。

image.png

image.png

3 指针接收者

  1. 对于接收者是比较大些的类型,可以使用指针,会更快,不仅是省了些内存资源,更多的是直接操作该类型的值,不用拷贝一份,然后在操作,效率会很高。
  2. 对于需要修改接收者的,需要使用指针完成。
  3. 不适用指针的情况,对于接收者类型是channel、slice、map这类的引用类型。
  4. 其他的情况,根据自身需要选择是否接收者使用指针类型,比如我不想改变原值,指向拷贝一份单独操作,那就不能用指针。

4 指针的好处

  1. 可以直接修改某个数据的值。
  2. 当接收者使用指针类型时,参数传值时,可以节省内存,尤其接收者是比较大的类型。

5 指针的总结

使用&操作符来获取地址并赋值后,就会得到这个变量的指针,指针取值(对该指针使用*操作,获取值,还有对于空指针--> 就是定义了指针,但未被使用的情况下,默认为nil,可以用它来进行空指针判断。)。指针 有一些限制的,比如不能获取常量的指针。除了上面指针接收者4种情况,还有些其他情况,你想直接修改值,上指针,当然像int、bool这样的数据类型,没必要使用,就放过它们吧,肉太小,塞牙不值得。为了并发安全,少用指针。指针不要嵌套,虽然指向指针的指针看着很帅,也被允许,可能对你来说用起来很舒服,但对他人来说,无形增加了代码的复杂度。