## 11. Go语言中cap函数可以作用于哪些内容?
cap()函数返回的是数组切片分配的空间大小。/
[ref0](https://zhuanlan.zhihu.com/p/261783653)
[ref1](https://studygolang.com/articles/4561)
- array(数组)
- slice(切片)
- channel(通道)
## 12, go convey 是什么? 一般用来做什么?
[studygolang-goconvey初探](https://studygolang.com/articles/1513)
- go convey 是一个支持golang的单元测试框架
- go convey 能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web页面
- go convey 提供了丰富的断言简化测试用例的编写
## 13, Go语言中new和make有什么区别码?
[studygolang](https://studygolang.com/articles/30199)
new的作用是初始化一个指向类型的指针 new 函数是内建函数, 函数定义:
func new(Type) *Type
- 使用new函数来分配空间
- 传递给new函数的是一个类型,而不是一个值
- 返回值是指向这个新分配的地址的指针
## 14. Go语言中的make作用是什么
>make 是为这个变量分配 真实的内存地址
>
make 的作用是为 slice, map or chan 的初始化
然后返回引用 make 函数是内建函数,函数定义:
```go
func make(Type, size IntegerType) Type
```
make(T, args)函数的目的和 new(T)不同 仅仅用于创建 slice, map,
channel 而且返回类西行是实例
## 15. Printf(),Sprintf(),FprintF()都是格式化输出,有什么不同?
虽然这三个函数,都是格式化输出,但是输出的目标不一样
`Printf`是标准输出,一般是屏幕,也可以重定向
`Sprintf()`是把字符串格式化后返回,然后用字符串类型的变量收它.
`Fprintf()`是把格式化的字符串输出到文件中
## 16. Go语言当中数组和切片的区别是什么
- 数组:
>数组固定长度数组长度是数组类型的一部分,所以[3]int 和[4]int 是两种不同
的数组类型数组需要指定大小,不指定也会根据处初始化对的自动推算出大
小,不可改变数组是通过值传递的
- 切片:
>切片可以改变长度切片是轻量级的数据结构,三个属性,指针,长度,容量不
需要指定大小切片是地址传递(引用传递)可以通过数组来初始化,也可以通
过内置函数 make()来初始化,初始化的时候 len=cap,然后进行扩容。
## 17. Go语言当中值传递和地址传递(引用传递)如何运用? 有什么区别?
1. 值传递只会把参数的值复制一份放进对应的函数,两个变量的地址不同,
不可相互修改。
2. 地址传递(引用传递)会将变量本身传入对应的函数,在函数中可以对该变
量进行值内容的修改。
> 大部分场景 都是用 引用传递
>
> 除非这个值需要拷贝后进行操作
## 18. Go 语言当中数组和切片在传递的时候的区别是什么
1. 数组是值传递
2. 切片是引用传递
> 怎么记住呢,就是切片他是引用的 链式分部
> 所以传一个切片头的引用更合理
>
> 数据一连续的内存空间,所以是值传递
>
>
>
## 19. Go语言是如何实现扩容的?
```go
func main() {
arr := make([]int, 0)
for i := 0; i < 2000; i++ {
fmt.Println("len 为", len(arr), "cap 为", cap(arr))
arr = append(arr, i)
}
}
我们可以看下结果
依次是
0,1,2,4,8,16,32,64,128,256,512,1024
但到了 1024 之后,就变成了
1024,1280,1696,2304
每次都是扩容了四分之一左右
```
## 20、看下面代码的 defer 的执行顺序是什么? defer 的作用和特点是什么?
- defer 的作用是:
1. 你只需要在调用普通函数或方法前加上关键字 defer,就完成了 defer 所需要
的语法。
2. 当 defer 语句被执行时,跟在 defer 后面的函数会被延迟执行。直到
包含该 defer 语句的函数执行完毕时,defer 后的函数才会被执行,不论包含
3. defer 语句的函数是通过 return 正常结束,还是由于 panic 导致的异常结束。
你可以在一个函数中执行多条 defer 语句,它们的执行顺序与声明顺序相反。
- defer 的常用场景:
1. defer 语句经常被用于处理成对的操作,如打开、关闭、连接、断开连接、
加锁、释放锁。
2. 通过 defer 机制,不论函数逻辑多复杂,都能保证在任何执行路径下,资
源被释放。
3. 释放资源的 defer 应该直接跟在请求资源的语句后。
---
有疑问加站长微信联系(非本文作者))