golang面试题002

victorfengming · · 645 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

## 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 应该直接跟在请求资源的语句后。 ---

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

645 次点击  ∙  1 赞  
加入收藏 微博
上一篇:golang面试题001
下一篇:golang面试题003
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传