Golang 一些题目
golang中分为值类型和引用类型
- 值类型分别有:int系列、float系列、bool、string、数组和结构体
- 引用类型有:指针、slice切片、管道channel、接口interface、map、函数等
- 值类型的特点是:变量直接存储值, 内存通常在栈中分配
- 引用类型的特点是:变量存储的是一个地址, 这个地址对应的空间里才是真正存储的值, 内存通常在堆中分配
数组和切片的区别
数组是定长的, 数组是值类型
切片是不定长的, 是引用类型, 且需要通过make来初始化, 否则是nil
make和new
- make 的作用是初始化内置的数据结构, 也就是我们在前面提到的切片、哈希表和 Channel
- new 的作用是根据传入的类型分配一片内存空间并返回指向这片内存空间的指针
方法值接收者和指针接收者的区别
- 如果方法的接受者是指针类型,无论调用者是对象还是对象指针, 修改的都是对象本身,会影响调用者;
1 |
|
- 如果方法的接受者是指针类型,无论调用者是对象还是对象指针, 修改的都是对象本身,会影响调用者;
1 |
|
- 使用指针类型的理由
- 希望修改调用者的值
- 避免每次调用方法时复制该值,在值的类型为大型结构体时,使用指针会更加高效
Go函数返回局部变量的指针是否安全
函数局部变量的指针返回,go编译器会进行逃逸分析,如果局部变量的作用域超出该函数,则不会将内存分配在栈上,而是分配在堆上
slice扩容机制
- 如果当前切片的长度小于 1024 就会将容量翻倍;
- 如果当前切片的长度大于 1024 就会每次增加 25% 的容量, 直到新容量大于期望容量;
Golang 一些题目
https://maocat.cc/2023/01/06/golang/一些题目/