很多年以前,当我第一次接触到ORM的时候,我就有一点疑惑:这玩意用起来倒是方便,就是模型结构得一个字段一个字段的写,非常枯燥也非常累人,而且如果表结构修改了,比如增加、减少或者修改了一个字段,就得修改模型文件。那个时候也没有想到可以从数据库中读取到目标表的表结构数据自动生成ORM需要的模型结构。直到有一天我看到一个根据模板自动生成ORM的模型文件的代码,然后我就用golang也写了这么一个玩意。完整的代码在这里。 我要晨读

已有1238人晨读

Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码。传统上,code代码为零表示成功退出,非零错误退出。 我要晨读

已有633人晨读

因项目需要使用ECB模式下的3DES算法加解密信息,golang默认只提供CBC模式,只能自己实现ECB模式。 参考https://segmentfault.com/a/11...,文章对ECB模式的DES有解释,并实现了部分DES算法样例。这里把算法补全,提供3DES算法实现。 我要晨读

已有899人晨读

为什么 访问 localhost:9090 就能打印出 Hello world 呢?这背后究竟发生了呢?下面我们就一层一层揭开这个面纱! 1 追踪 http.HandFunc函数,发现它调用了 我要晨读

已有677人晨读

Go并发原语使得构建流式数据管道,高效利用I/O和多核变得简单。这篇文章介绍了几个管道例子,重点指出在操作失败时的细微差别,并介绍了优雅处理失败的技术。 我要晨读

已有572人晨读

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,那真是一个坏主意。对此,我曾说过很多次了,因此也许你们讨厌了我的游说,所以我想到了把它写下来并且去做。 我要晨读

已有508人晨读

推荐使用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 的设计原理。 我要晨读

已有588人晨读