稍微复杂一些的程序的初始化会涉及到多个模块,任何一个模块初始化失败以后,就应该把已经初始化的其他模块一一回滚。这容易使得初始化的错误处理比较冗长,包含重复代码;或者执行路径跳转不容易读懂,也容易出错。用go语言提供的defer和有名返回值的机制,可以比较容易地解决这个问题,让初始化错误处理简洁清晰。 我要晨读
在生成环境中使用 Go 语言两年的总结,从 性能表现(Performance)、内存占用(Memory)、并发性(Concurrency)、可靠性(Reliability)、部署(Deployment)和 天赋(Talent)等方面介绍。 我要晨读
如果你成天与编程为伍,那么并发这个名词对你而言一定特别耳熟。需要并发的场景太多了,例如一个聊天程序,如果你想让这个聊天程序能够同时接收信息和发送信息,就一定会用到并发,无论那是什么样的并发。这次晨读进一步认识golang中的并发。 我要晨读
在底层,interface作为两个成员实现:一个类型和一个值。该值被称为接口的动态值, 它是一个任意的具体值,而该接口的类型则为该值的类型。只有在内部值和类型都未设置时(nil, nil),一个接口的值才为 nil。特别是,一个 nil 接口将总是拥有一个 nil 类型。Go中error类型的nil值和nil 知多少? 我要晨读
Go 语言中有指针。Go 的指针跟 C 中的指针有相同的地方,也有不同的地方,一个大家都熟知的不同就是 Go 中的指针不支持运算。除此之外,本文比较了 Go 语言指针和 C 中指针的其他方面,对指针迷糊的不妨一读。 我要晨读
排序 sort 是个基本的操作,当然搜索 search 也是。go 是通过 sort 包提供排序和搜索,所以使用起来跟类型是有关的。本文全面介绍了 Go 语言的排序,包括基本类型、结构类型等,同时还深入地介绍 sort 包的实现。 我要晨读
go 语言或是 golang 的官网首页上有 8 个例子代码,赶脚灰常好,赶脚值得写篇文章简单分析一下,它们分别是:hello,世界、处理命令行参数、斐波拉契闭包、皮亚诺整数、并发求圆周率 π、并发通过筛选法求素数、孔明棋和二叉排序树的比较。 我要晨读
在Go语言中,文件是使用一个os.File类的对象指针表示的,也可以称这指针为文件句柄(filehandle),os.Stdin和os.Stdout也是属于这个*os.File类型的。本文介绍Go语言下的文件读写的各种操作方法。 我要晨读
接触到GO之后,GO的网络支持非常令人喜欢。GO实现了在语法层面上可以保持同步语义,但是却又没有牺牲太多性能,底层一样使用了IO路径复用,比如在LINUX下用了EPOLL,在WINDOWS下用了IOCP。本文针对event-based场景的服务端做了简易的封装,实现一个简易TCP通信框架。 我要晨读
《2048》由19岁的意大利人Gabriele Cirulli于2014年3月开发。游戏任务是在一个网格上滑动小方块来进行组合,直到形成一个带有有数字2048的方块。本文讲述该游戏的Go语言实现,包括游戏逻辑设计、界面设计和最后的实现,并附带有完整地源代码。 我要晨读
RPC(Remote Procedure Call Protocol)—— 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。golang的rpc有两种方法进行调用。本文给出了相关例子。 我要晨读
竞争条件是最狡诈的、最难以找到的编程错误。通常,在代码被布置到生产环境很久以后,它们才会出现并且造成奇怪的、神秘的错误。尽管Go语言的并发机制使得更容易的编写出干净的并发代码,依然无法避免竞争条件的出现。Go 语言提供了工具来检测代码中的竞争条件。 我要晨读
如果是命令行程序需要退出, CTRL+C 是最直接的方法,CTRL+C 会发出 SIGINT 信号,该信号的默认行为是当前程序退出。C 语言中有信号处理函数 signal,能够捕获感兴趣的信号,那么 Go 语言能否做同样地事情呢?怎么做?本文有较详细的介绍。 我要晨读
Go 语言虽然自带单元测试功能,在 GoConvey 诞生之前也出现了许多第三方辅助库。但没有一个辅助库能够像 GoConvey 这样优雅地书写代码的单元测试,简洁的语法和舒适的界面能够让一个不爱书写单元测试的开发人员从此爱上单元测试。由无闻带来的《GoConvey-优雅的单元测试》。 我要晨读
内存模型的目的是为了定义清楚变量的读写在不同执行体里的可见性。理解内存模型在并发编程中非常重要,因为代码的执行顺序和书写的逻辑顺序并不会完全一致,甚至在编译期间编译器也有可能重排代码以最优化CPU执行。本文讲解Go内存模型,同时提到了Java的内存模型,作对比。 我要晨读
这段时间看了一些Go语言相关的东西,发现Go语言的最大特性并发模型类似于C++里面的线程池,真心觉得用来开发网游服务器实在是太合适了,协程在并发有优势,开发效率会比C++提升不少,而执行效率据说是不会有太大下降。本文由Go语言并发模型想到游戏服务器并发。 我要晨读
C/C++ 有大量的优秀库,而 Go 提供了 cgo,使得 Go 可以使用 C/C++ 提供的库。本文一步步详细介绍了 Go 中使用动态库 C/C++ 库,同时解释了在使用过程中可能会遇到的问题,相信对有这方面需求的人会有帮助。 我要晨读
在go中channel是一个很强大的东西,但是在处理某些事情上面还是有局限的。其中之一就是一对多的通信。channel在多个writer,一个reader的模型下面工作的很好,但是却不能很容易的处理多个reader等待获取一个writer发送的数据的情况。本文的解决方式很巧妙,希望对大家有用。 我要晨读
经历了数十年发展的C语言,各种各样的现成的库已经非常丰富。通过cgo,可以在Go语言中使用C语言代码,充分利用好现有的“轮子”。本文介绍使用C语言变量、函数、结构体、联合体、回调函数的方法,动态链接库(Dynamic Link Library,dll)的调用欢迎补充。 我要晨读
通常情况下,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established,而实际上该socket已经不可用了。在Go中,我们会使用timer来定时检测。本文介绍了一种优化方法。 我要晨读