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来定时检测。本文介绍了一种优化方法。 我要晨读
go提供了一套统一操作database的sql接口,任何第三方都可以通过实现相应的driver来访问感兴趣的数据库。go提供了一套很好的机制来处理数据库的查询操作,但发现当sql query语句过多,如果每一个查询都按照官方例子代码写,代码量太大了。本文介绍如何对这种情况进行封装。 我要晨读
Sourcegraph号称通过分析全球的开源项目来真正地展现相关项目之间的关联。它主要提供以下两个功能:根据代码查找文档与使用用例;选择正确的库或函数来使用。本文展示如何开始使用 Sourcegraph 这个网站来作为 Go 语言学习和开发的辅助工具。 我要晨读
当我发现 beego 框架时感觉非常激动。我只用了大约 4 个小时就将一个现有的 Web 应用程序移植到了该框架上并做了一些端对端测试的调用扩展。本文介绍 使用 Beego 与 Mgo 开发的示例程序。 我要晨读
Go 语言中的 Array,Slice,Map 和 Set,这些都是使用很频繁很重要的数据结构,各种资料也不断的介绍、讲解它们。本文将它们放在一起,介绍它们的内部机制、初始化、使用和特性。对于 Set,并非Go内置,而是自己实现的。 我要晨读
go语言的逆袭。本次晨读介绍的不是学习Go技术的,而是Go的一些情况介绍,相信看完后,你会庆幸自己当初做出了学习Go的决定。本文主要介绍了:Go 语言的哪些特点最吸引您?有哪些常见的应用场景?成功的开源项目、哪些公司在使用Go等。 我要晨读
Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。本文介绍Go中引入的Exception处理:defer, panic, recover。 我要晨读
Go对web服务器的编写提供了非常好的支持,标准库中提供了 net/http 包来方便编写服务器。写一个最简单的hello world服务器,代码简短,那么 http.ListenAndServe() 到底做了什么?本文带你分析它是如何工作的。 我要晨读
在面向对象盛行的年代,新的编程语言,自然会有人问,是否是面向对象的。面向对象的三大特点:封装、继承、多态。Go是否支持这三大特征?是否可以模拟实现?如果你对Go面向对象方面的知识感到迷惑,不妨看看别人是怎么理解的。 我要晨读
学习别人的经验,是一种快速学习的方法。你可能不知道的十个技巧。本文总结了 Go 语言使用的一些技巧,包括:匿名结构体、嵌套结构体、godoc命令、使用统一个Channel发送和接收消息 等。 我要晨读