顾名思义,静态库可以理解为该库相对于可执行目标文件是静态的,而动态库相对于可执行文件是动态的。静态库跟可执行文件捆绑在一起,不需要依赖操作系统中其它库;动态库则一般固定在操作系统的特定位置,如/usr/lib目录中,如果可执行文件依赖于动态库,一旦该库被移动或损坏,则无法运行。有兴趣可以进行以下测试 …...
Read more →
除 Telnet 以及 Go 代码部分之外,其它内容基本翻译自官网。另外,写完本文之后,发现一篇文章写得更好,代码当然也比我的更好,传送门 Reading and Writing Redis Protocol in Go 。路漫漫,我还要更努力。
其实去年就看过实现 Redis 客户端的一些文章, …...
Read more →
在 Go 语言中,所有成员在包内均可访问,无论是否在同一源码文件中。但只有名称首字母为大写的成员可导出,在包外可视。
但是在进行代码重构时,我们会将一些内部模块陆续分离开来,以独立包的形式维护。这时,基于首字母大小写的访问权限控制则显示过于粗犷。我们希望这些包的可导出成员仅在特定范围内可访问,而不是 …...
Read more →
语句 defer 向当前函数注册稍后执行的函数调用。这些调用被称作延迟调用,因为它们直到当前函数执行结束前才被执行,常用于资源释放、解除锁定以及错误处理等操作。
延迟调用,注册的是调用,参数在注册时被复制并缓存起来。多个延迟注册按 FILO 的次序执行。
func main() { x, y := …...
Read more →
Go 有一个由go test命令和testing包组成的轻量级测试框架。testing包为 Go 包提供自动化测试支持,并和go test命令配合使用,自动运行符合以下形式的任意函数:
func TestXxx(*testing.T) 被测试函数Xxx首字母为大写。在测试函数中使用 …...
Read more →