cap 函数在讲引用的问题中已经提到,可以作用于的类型有:
- array(数组)
- slice(切片)
- channel(通道)
12、go convey 是什么?一般用来做什么?
- go convey 是一个支持 golang 的单元测试框架。
- go convey 能够 自动监控文件修改并启动测试 ,并可以将测试结果 实时输出 到 Web 界面。
- go convey 提供了丰富的 断言简化测试 用例的编写。
13、Go 语言当中 new 和 make 有什么区别吗?
new 的作用是初始化一个指向类型的指针。 new 函数是内建函数,函数定义:
func new(Type) *Type
- 使用 new 函数来分配空间
- 传递给 new 函数的是一个 类型 ,而不是一个值
- 返回值是指向这个 新分配的地址的指针
14、Go 语言中 make 的作用是什么?
make 的作用是为 slice , map 或者 chan 的初始化,然后返回引用。 make 函数是内建函数,函数定义:
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 语言是如何实现切片扩容的?
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 ,就完成了 defer 所需要的语法。
当 defer 语句被执行时,跟在 defer 后面的函数会被 延迟执行 ,直到包含该 defer 语句的函数执行完毕时, defer 后的函数才会被执行。
不论包含 defer 语句的函数是通过 return 正常结束,还是由于 panic 导致的异常结束,你可以在一个函数中执行多条 defer 语句,它们的执行顺序与声明顺序 相反 。
有更多补充,欢迎评论区留言