「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」。
0 环境
- 系统环境:win10
- 编辑器:vscode
- go版本:gol.17.3
- 参考文章:go语言中文文档
1 操作指针
操作指针的目的:对指针的指向值,获取指向值或对指向值进行修改。获取指向值的写法:
*后面加上指针变量。
2 指针参数
如下函数:可以看出假如我直接传参的,其实只是值的一份拷贝,如果你真想要这个值,只能
return回去。而我直接通过&变量地址,*类型接收,重新赋值即可。
3 指针接收者
- 对于接收者是比较大些的类型,可以使用指针,会更快,不仅是省了些内存资源,更多的是直接操作该类型的值,不用拷贝一份,然后在操作,效率会很高。
- 对于需要修改接收者的,需要使用指针完成。
- 不适用指针的情况,对于接收者类型是channel、slice、map这类的引用类型。
- 其他的情况,根据自身需要选择是否接收者使用指针类型,比如我不想改变原值,指向拷贝一份单独操作,那就不能用指针。
4 指针的好处
- 可以直接修改某个数据的值。
- 当接收者使用指针类型时,参数传值时,可以节省内存,尤其接收者是比较大的类型。
5 指针的总结
使用&操作符来获取地址并赋值后,就会得到这个变量的指针,指针取值(对该指针使用*操作,获取值,还有对于空指针--> 就是定义了指针,但未被使用的情况下,默认为nil,可以用它来进行空指针判断。)。指针
有一些限制的,比如不能获取常量的指针。除了上面指针接收者4种情况,还有些其他情况,你想直接修改值,上指针,当然像int、bool这样的数据类型,没必要使用,就放过它们吧,肉太小,塞牙不值得。为了并发安全,少用指针。指针不要嵌套,虽然指向指针的指针看着很帅,也被允许,可能对你来说用起来很舒服,但对他人来说,无形增加了代码的复杂度。