七叶笔记 » golang编程 » Golang基础类面试题与答案(二)

Golang基础类面试题与答案(二)

11、Go 语言中 cap 函数可以作用于哪些内容?

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 语句,它们的执行顺序与声明顺序 相反

有更多补充,欢迎评论区留言

相关文章