Go 语言有一些我们常说的「坑」,有不少优秀的文章解释讨论过这些「坑」。这些文章所讨论的东西非常重要,尤其对 Go 的初学者来说,时不时就有人掉进这些小「坑」里。 我要晨读

已有688人晨读

golang的defer优雅又简洁, 是golang的亮点之一。defer在声明时不会立即执行,而是在函数return后,再按照先进后出的原则依次执行每个defer,一般用于释放资源、清理数据、记录日志、异常处理等。 我要晨读

已有640人晨读

Reflection(反射)在计算机中表示 程序能够检查自身结构的能力,尤其是类型。它是元编程的一种形式,也是最容易让人迷惑的一部分。 本文中,我们将解释Go语言中反射的运作机制。每个编程语言的反射模型不大相同,很多语言索性就不支持反射(C、C++)。由于本文是介绍Go语言的,所以当我们谈到“反射”时,默认为是Go语言中的反射。 我要晨读

已有379人晨读

对于程序及服务的控制,本质上而言就是正确的启动,并可控的停止或退出。在go语言中,其实就是程序安全退出、服务控制两个方面。核心在于系统信号获取、Go Concurrency Patterns、以及基本的代码封装。 我要晨读

已有670人晨读

最近在做一个golang的连接池。测试过程中发现一个有趣的现象,获取的连接没有归还给连接池,那么过一段时间后该连接会自动关闭掉。猜测这跟连接池应该是没有关系的,于是再用普通的连接做了实验,即dial一个tcp连接,发送请求,然后程序进入sleep,一段时间后该连接还是会自动关闭。 我要晨读

已有758人晨读

sync.once可以控制函数只能被调用一次,不能多次重复调用。 我们可以用下面的代码实现一个线程安全的单例模式 我要晨读

已有528人晨读

进程切换只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 我要晨读

已有422人晨读

最近有人在 Gopher 的 Slack Channel 上使用 cgo,对此我感到十分担心,尤其是竟然有个组织内部打算用一个项目来展示 Go,那真是一个坏主意。对此,我曾说过很多次了,因此也许你们讨厌了我的游说,所以我想到了把它写下来并且去做。 我要晨读

已有509人晨读

推荐使用net/http作为入门起步的标准库,如果你需要路由方面功能,可使用Gorilla和Gocraft/web,Revel 和 Martini有太多的依赖注入和其他魔术让人感觉舒服,Gorilla是最小的。 我要晨读

已有703人晨读

实现一个 fibonacci 函数,返回一个函数(一个闭包)可以返回连续的斐波纳契数。 我要晨读

已有828人晨读

最初我选择的方向是LXC,因为这个技术我本身比较了解,也是比较流行的技术,我花了几天时间就把POC做好了。正好这个时候公司来了个新同事叫Susan,她以前是DotCloud的销售人员,知道我在做这个事情,建议我试试Docker。于是我又开始研究Docker,感觉是这个新生事物很多理念都非常新,但客户的需求是传统虚机用法,似乎那时的Docker并没有带来特别多的好处,而且Docker Hub的用法,CloudStack里secondary storage并不能很好的支持,所以最后我们还是采用了LXC的方案。 我要晨读

已有501人晨读

持久化数据结构简介 这篇文章里, 我们对比各种可以用来实现持久化数据结构的方案,详细介绍了 Vector Trie 这种数据结构,说明了用它实现 List 优势。 HAMT 的全称是 Hash Array Mapped Trie,它和 Vector Trie 一样,都利用了前缀树(Trie)这种数据结构作为底层数据结构, 但是由于 Map 本身和 List 之间性质的差别,HAMT 在很多方面进行了特别的处理。接下来我们先从原始 Hash Table 数据结构谈起, 逐步引出 HAMT 的设计原理。 我要晨读

已有589人晨读

随着实时分析技术的发展及成本的降低,用户已经不仅仅满足于离线分析。目前我们服务的用户包括微博、微盘、云存储、弹性计算平台等十多个部门的多个产品的日志搜索分析业务,每天处理约32亿条(2TB)日志。 我要晨读

已有493人晨读

这两天网络上被Alpha Go和李世石的围棋对决刷屏,目前Alpha Go已经2-0领先。从前年开始关注研发这套系统的DeepMind公司,一直在追终他们最新的论文。深度学习这个词随着这一事件又火了一把,可是我想说的是虽然阿尔法狗确实得益于深层神经网络的发展,但是其能超过以往的围棋AI的原因是他将深度学习和强化学习结合在一起使用,再融合传统围棋AI主要使用的蒙特卡洛树搜索方法。要知道只用深度学习的方法去解决围棋问题在几年前已经有很多人在尝试,其效果却往往还不及当前最好的围棋AI(例如:Zen,Pachi等 我要晨读

已有580人晨读

最后一个非叶子节点 : root = length/2(当length为奇数的时候root向下取整) 在GO语言中的索引位置:root - 1, 左右孩子节点:child_l = 2*root,索引位置:child_l-1,右孩子的节点: 2*root+1 索引位置. 我要晨读

已有421人晨读

时下,对于大部分 IT 玩家来说, Docker 和 Mesos 都是熟悉和陌生的:熟悉在于这两个词无疑已成为大家讨论的焦点,而陌生在于这两个技术并未在生产环境得到广泛使用,因此很多人仍然不知道它们究竟有什么优势,或者能干什么。近日, John Walter 在 Dzone 上撰文 Creating a Distributed System in 300 Lines With Mesos, Docker, and Go,讲述了 Mesos、Docker 和 Go 配合带来的强大破坏力,本文由 OneAPM 我要晨读

已有399人晨读

很多人在搞ELK,很多人也在搞Storm。更多人在用传统的Nagios、Zabbix等监控工具。Jason Dixon在2012就意识到这些工具的问题是每个人都想做到大而全,实际上我们更需要的是一对小二精的组件拼装成一个个性化的解决方案。推荐大家去看一下他的演讲视频 我要晨读

已有577人晨读

继上一篇关于inject注入的笔记,理解了martini的关键核心之一:依赖注入。注入回调函数,由运行时进行主动调用执行。这一篇主要是注解martini的骨架martini.go的实现,下面先从一个简单的martini使用实例,即创建一个最简单的http服务器开始。 我要晨读

已有513人晨读