数据传递和指针
首先说明一个观点:go语言里面的数据传递全部都是值传递。这一点可以举个例子说明:
声明一个arr数组,然后在modify里面修改。学过Java或者C++的同学应该都明白,这个修改是会直接在原数组上修改。也就是说参数传递是引用传递,但是在go里面不是这样的,他是值传递。可以看一下打印结果:
还是1没变。这应证了我们的说法。再举个例子:
你会发现其实person.name还是ss,完全没变。这也就验证了我们说的,go里面所有的参数传递全部都是引用传递。这其实会带来相当大的问题:
(1)性能问题。这个是显然的,如果你的数组很大,那么就会有copy的开销。而且不容忽视
(2)修改无法生效。就像刚才我们演示的那样,其实你只能做读操作,写操作是没法生效的。
怎么解决这个问题呢?这就要用到指针的概念了。
指针
这个如果学过c++/c的同学可能会很懂,但是没关系,我先解释一下最基础的概念。
变量的