Golang中遇到的坑

本文总结了Golang编程中的一些常见陷阱,包括切片append的使用、接口查询、goroutine执行顺序、无缓冲channel、select机制、defer的注意事项等。此外,还探讨了类型定义、struct属性序列化、String()方法重写、错误处理、变量声明、map和slice的比较等问题,以及如何优化Go代码的性能和可读性。
摘要由CSDN通过智能技术生成
  • 切片append添加的是单个元素不是切片        s = append(s[:i], s[i+1:]...)    切记...
  • 声明多数据类型时,如果遇到换行,结尾必须是逗号或者大括号
  • 接口查询: 在一个接口变量中判断,把值赋给接口变量的对象,究竟有没有实现另一个接口。 f1,ok := f2.(f1type)
  • goroutine创建的顺序不代表是执行的顺序,会分到不同的core上执行。理论上是放于一个任务队列但是最后那个可能会放在专一的next位置
  • 无缓冲channel默认缓冲为0
  • select 机制:
  •       select+case用于阻塞监听goroutine
  •       select底下有多个可执行的case,则随机执行一个
  •       select常配合for循环来监听channel有没有故事发生,其中break只是退出当前select
  • defer机制:
          defer先进后出的方式执行
          defer在for循环中可能导致性能问题
          defer一定要在判断err之后
          调用os.Exit后defer不会被执行
          panic遇到defer后先执行defer再传递panic
  • 将格式好的字符串输出
          Printf() 是把格式字符串输出到标准输出
          Sprintf() 是把格式字符串输出到指定字符串中,参数多一个char*,为目标字符串地址
          Fprintf() 是把格式字符串输出到制定文件设备中,参数多一个FILE*
  • 注意nil map和nil slice 通过var声明没有字面量的map和slice后不会创建底层数组,无法直接添加元素 
  • array和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值