freemarker调用后台方法_Go面试常遇到的坑和解决方法

本文总结了Go语言在编程过程中常遇到的问题,包括可变参数是空接口类型、数组值传递、map遍历顺序、返回值屏蔽、recover使用、main函数提前退出等,并给出了相应的解决方法。同时,讨论了并发、内存管理和Goroutine泄露等问题,提供了解决这些问题的实践建议。
摘要由CSDN通过智能技术生成

本文介绍在阅读Go语言高级编程一书,看到书中总结Go语言常遇到的问题和解决方法与大家分享一下。

  1. 可变参数是空接口类型
  2. 数组是值传递
  3. map遍历时顺序不固定
  4. 返回值被屏蔽
  5. recover必须在defer函数中运行
  6. main()函数提前退出
  7. 通过Sleep()来回避并发中的问题
  8. 独占CPU导致其他Goroutine饿死
  9. 不同Goroutine之间不满足顺序一致性内存模型
  10. 闭包错误引用同一个变量
  11. 在循环内部执行defer语句
  12. 切片会导致整个底层数组被锁定
  13. 空指针和空接口不等价
  14. 内存地址会变化
  15. Goroutine 泄露

这里列举的使用Go语言常遇到的问题都是符合Go语言语法的,可以正常编译,但是可能出现运行结果错误,或者是有资源泄漏的风险。

Go语言常遇到的问题和解决方法总结

1、 可变参数是空接口类型

当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数展开的问题

ef19c44af43827815a1cd9137a3e22c0.png

可变参数是空接口类型

不管是否展开,编译器都无法发现错误,但是输出是不同的。

2、数组是值传递

在函数调用参数中,数组是值传递,无法通过修改数组类型的参数返回结果:

7fbe13a5c90dfcf12fcada2fe5d6f41d.png

数组是值传递

必要时需要使用切片。

d61cd83bc0c2f0af19855ba7f890cdc6.png

3、map遍历时顺序不固定

map是一种散列表实现,每次遍历的顺序都可能不一样:

c6f6dda9e7e003de1b9a23e3009e9e98.png

第一执行map的结果

5851d243a14488553512c50337fbb586.png

第二执行map的结果

为什么

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值