go中fmt.Println(&array)打印的是数组地址吗?

taatcc · · 9295 次点击
haoyupei
大道至简,始终如一
可以跟踪源代码了,学习golang开发的都是有好几年经验的人了!
#6
更多评论
1 &[1 2] 这个有点长,你可以看下fmt包。print.go中的printValue这个方法,重点我给你截图了:首先&的由来![image.png](https://static.studygolang.com/180626/c71f652038e10a9843b95cd586529ca0.png),然后递归获取value的内容,如果事slice或者数组就用[]包围![image.png](https://static.studygolang.com/180626/aed820ce1079a0366a0ab7fa78fa04d7.png) ) 2 slice地址是首元素地址是没错。因为fmt中%p是通过反射来去指针的![image.png](https://static.studygolang.com/180626/7e0c94f01ad01b92a12490988c85bf9b.png) 。而reflect包中是这样的![image.png](https://static.studygolang.com/180626/eb666b37c85f4b809cb009f7d03f18ed.png) 其实取得就是slice中的sliceHeader中的data。![image.png](https://static.studygolang.com/180626/aea005d47050674ce42530fc97a354ae.png)
#1
不能删除和修改好难受,以上第二条的解释是错误的。&a其实反射之后应该是 reflect.Ptr. 所以应该走![image.png](https://static.studygolang.com/180626/ddef03cc73ffa807a910b3ed8804c4b0.png)。 总之就是这块儿代码了,看看就知道了。
#2