「12」go 指针和引用
今写代码时,传函数无意间想到一个问题,slice通过参数传递给函数,为何可以改变具体的值呢?
如何解决这个问题?
- 官方查文档
- 看源码
- google看看有没有好的见解
- 思考🤔+冥想🧘♂️
(ps:解决问题,主要不是看结果是怎么样的,主要是考虑问题的角度)
¶查资料
官网指南之Slice
有一段是这么描述:
Slices hold references to an underlying array, and if you assign one slice to another, both refer to the same array.
¶查源码
¶/src/runtime/slice.go
1 | type slice struct { |
¶思考
原来下层是用过array这个指针,指向具体的数据的
那么其他的引用类型呢?
1 | Map? |
¶引用类型之Map
¶看源码 /src/runtime/map.go:
1 |
|
¶引用类型之Chan
¶源码:/src/runtime/chan.go
1 | type hchan struct { |
¶引用类型之Interface
¶源码/src/runtime/runtime2.go
1 | type iface struct { |
¶结论?通过指针?
从上述源码看来,内部结构中都是用指针类型来指向具体的值,
So:形同这类的结构,肯定是引用类型的,具体是指针指向别的地址,从而来引用值。
其实这个特性很早就晓得了,只是今天又看到了,觉得还是记录着吧,也许后续哪一天就有了创新的灵感来着~~.
[睡觉了~最近有点乏~ZZzzz…]