Go语言基础学习七-指针与切片操作
一.值,指针和引用类型
与C和C++不同 Go语言中的数组是按值传递的,所以传递一个大数组的代价特别大,幸运的是,在Go语言中不常用数组,因为我们可以用切片代替(所以切片和数组到底有什么区别?)
当一个变量传入函数时,会复制该变量的值到该函数作用域,所以本地变量在不使用时会自动被垃圾回收,很多情况下我们希望自己来管理变量的生命周期而非由它的作用域决定。所以通过使用指针,我们可以让参数的传递成本最低,且内容可修改,且变量的生命周期独立于作用域。
指针的操作与C类似,&用作取址操作,*用于取值操作指针在这里的操作以及与++,--的优先级同C中的指针部分相似,所以这里我就不细讲了。
Go语言的自动内存管理机制使得使用取址操作符&来取得函数参数或本地变量的地址非常安全,因为Go语言中只要一个指针引用一个变量那个变量就会在内存中保留。若在C及C++中这么操作非静态变量将会非常麻烦!(费解?有待考虑)
在一些场景,我们需要传递非引用类型的可修改值,或需要高效的传入大类型的值,这时候需要使用到指针,Go语言提供了两种,创建变量的语法,同时获得指向它们的指针:
1.使用内置的new()函数。
2.使用地址操作符。
如: type composer struct{
name string
birthYear int