值、引用、指针类型有什么不同?
> 引用:而slice、string、map三种类型比较特殊,类似于指针传递(我把这3中类型归类为引用类型),其中slice比较特殊,要修改slice的长度依然需要通过指针传递并操作。
<a href="/user/mjhx" title="@mjhx">@mjhx</a> 有一点得指出来一下,string类型虽然底层实现是引用传递,但是由于string类型不许被修改,所以string类型在逻辑上与值传递并没有差别。
参考:https://github.com/astaxie/build-web-application-with-golang/issues/331
#9
更多评论
本人学java的,习惯把golang跟java中的类型作对比 ,个人总结如下:
golang中从储值上分成两种类型,存储型(int、float、string、slice)和非存储型(func) 这里只针对存储型的
值:存储型大部分都是值传递(包括 int、float、bool、array等等)在函数调用中作为参数传递时,会copy出一份副本到函数内部操作,对副本的操作跟外部的变量值无关。
引用:而slice、string、map三种类型比较特殊,类似于指针传递(我把这3中类型归类为引用类型),其中slice比较特殊,要修改slice的长度依然需要通过指针传递并操作。
指针:针对某一个变量所在内存地址的引用,作为参数传递时无需copy副本,函数调用中指针传递只占用8byte,对于比较大的结构体传递时用指针效率更高一些。并且指针可以操作任何存储型变量的值。
实际上golang并没有区分值和引用,只是个人理解。
刚入门golang,以上纯属个人理解,有错误希望大神及时指正。
#2