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

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

下面的总结是最近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中的各种坑(持续更新)

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

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