Golang中的各种坑(持续更新)

下面的总结是最近Golang开发中遇到的,和互联网上搜集到的坑,会持续更新:

  1. 字符串不是以\x0结束作为判断的

  2. 无锁队列只是在单核下,多核同样需要锁,需要线程间调度

  3. 格式化时间字符串只能用2006 01 02 15 04 05(时间原点), 并且在time/format.go写死了:

    2006-01-02T15:04:05Z07:00

    其实这是有意义的,每个字段正好对应:

    1 2 3 4 5 6 7
    
    
    月 日 时 分 秒 年 时区
    
  4. 当多个channel都处于就绪状态时,激活channel是随机的,不能按照顺序判断

  5. os.exit(1)执行后,defer是没有作用的

  6. Goroutine只有非阻塞的IO调用阻塞时,才会发生Goroutine切换,如果是系统调用:

    Golang会直接启动内核级线程,来实现异步。。。所以避免大量启动系统调用。。。

  7. 内存泄漏的一个坑 如果你的代码中出现这样,恭喜你,你已经在坑里。

    func somefunc() {
        for {
            // ...
            defer something.Cleanup()
        }
    }
    

    原因是这里的defer没有机会被执行到。 简单的解决办法是将这里的逻辑放到一个方法中去。

本文来自:天地孤影任我行

感谢作者:华子

查看原文:Golang中的各种坑(持续更新)

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。