Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。本文和大家一起深入理解interface。 我要晨读
Go语言新人常常会很疑惑为什么这门语言的声明语法(declaration syntax)会和传统的C家族语言不同。在这篇博文里,我们会进行一个比较,并做出解答。本文是 Rob Pike 在 Go 官方博客解释这个问题的翻译,那些依然疑惑这个问题的可以看看。 我要晨读
晨读序列:使用Golang开发微信公众平台之发送客服消息。关注并使用过微信“飞常准”公众号的朋友们都有过如下体验:查询一个航班情况后,这个航班的checkin、登机、起降等信息都会在后续陆续异步发给你,这个服务就是通过微信公众平台的客服消息实现的。这篇文章我们就来说说如何用golang实现发送文本客服消息。 我要晨读
晨读序列:使用Golang开发微信公众平台之接收加密消息。通过上篇,公众服务与微信服务器间的消息是“裸奔”的(即明文传输,通过抓包可以看到)。显然这对于一些对安全性要求较高的大企业服务号来说,比如银行、证券、电信运营商或航空客服等是不能完全满足要求的。于是乎就有了微信服务器与公众服务间的数据加密通信流程。 我要晨读
晨读序列:使用Golang开发微信公众平台之接收文本消息。一旦接入验证成功,成为正式开发者,你可能会迫不及待地想通过手机微信发送一条"Hello,Wechat”到你的公众号服务器。不过上一篇的那个程序还无法处理手机提交的文本消息,本篇将介绍如何用Golang编写公众号程序来接收手机端发送的 文本消息以及回复响应消息。 我要晨读
晨读序列:使用Golang开发微信公众平台。移动互联网时代,微信平台一枝独秀,是社交领域的巨人,但其诞生也才不到4年。微信平台的发展前景十分广阔,企鹅公司将其打造为人与人、人与物、物与物的统一、万能入口之雄心不变,因此围绕微信平台广大开发者依旧有诸多机会。本文是第一篇:接入验证。 我要晨读
两个 map(m1,m2),怎么比较内容是否一样?== 或 != 没法直接比较两个 map(编译会报错)。一般我们想到会是:循环m1,看看每个key是否都在m2中存在,再比较m1[key]是否和m2[key]相等,如果都ok,再依次循环m2,代码挺多。本文介绍了通过 Go 语言提供的 Reflect.DeepEqual 来实现 map 的比较。 我要晨读
如果go代码里使用了cgo,那么编译的时候电脑上必须按照gcc才能正确编译。这篇文章展示了如何用c写一个包让go调用并且不需要使用cgo。实际上,Go1.4之前(包括1.4),runtime 中的很多代码就是这种方式。了解这种方式,对深入学习 runtime 会有好处。 我要晨读
在Go语言中,没有字符类型,字符类型是rune类型,rune是int32的别称。Go语言中的字符和字符串,你应该经常使用,但 Unicode、UTF8、rune、int32 等一序列问题,你是否都能知其然呢。本文介绍 Go语言 中的字符和字符串,当做一个引子来好好研究下相关知识。 我要晨读
Go有强烈的C背景,除了语法具有继承性外,其设计者以及其设计目标都与C语言有着千丝万缕的联系。在Go与C语言互操作(Interoperability)方面,Go更是提供了强大的支持。尤其是在Go中使用C,你甚至可以直接在Go源文件中编写C代码,这是其他语言所无法望其项背的。本文介绍Go与C语言的互操作。 我要晨读
我们在生产环境下运行的系统要求优雅退出,即程序接收退出通知后,会有机会先执行一段清理代码,将收尾工作做完后再真正退出。我们采用系统Signal来 通知系统退出,即kill pragram-pid。本文介绍Go中的系统Signal处理。 我要晨读
Go语言受到诟病最多的一项就是其错误处理机制。如果显式地检查和处理每个error,这恐怕的确会让人望而却步。你可以试试这里列出的几个方法,以避免你走入错误处理方法的误区当中去。本文给出了Go语言的有效错误处理方法。 我要晨读
go语言有一个标准库log,提供了最基本的日志功能,但是没有什么高级的功能,如果需要高级的特性,可以选择glog或log4go。glog是google提供的,类似于google的c++ log库,使用起来非常简单。本文对 glog 使用进行介绍。 我要晨读
#技术晨读# [MySQL FAQ]系列 — 使用mysqldump备份时为什么要加上 -q 参数 mysqldump的时候加上q参数表示的是禁用buffer缓存来存放select结果,因为buffer缓存会使用到swap,然后会导致使用更多的内存和时间。 http://imysql.com/2015/03/21/mysql-faq-why-turn-on-quick-option.shtml 更多历史文章:http://studygolang.com/readings?rtype=1 我要晨读
本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对单元测试),包括基本技术、高级技术(并发测试、mock/fake、竞争条件测试、并发测试、内/外部测试、vet工具等)等,总结的很全面,这里整理记录下来,希望能给大家带来帮助。 我要晨读
Go Runtime hashmap实现。map 的底层实现就是一个 hash 表,大体结构上和平时在脑海里的 hash 表差不多。hashmap 通过一个 bucket 数组实现,所有元素将被 hash 到数组中的 bucket 中,bucket 填满后,将通过一个 overflow 指针来扩展一个 bucket 出来形成链表,也就是解决冲突问题。本文总结了一些实现细节点。 我要晨读
深入Go语言网络库的基础实现。本文将网络库的底层实现给大体上引导了一遍,知道底层代码大概实现在什么地方,方便结合源码深入理解。Go语言中的高并发、同步阻塞方式编程的关键其实是”goroutine和调度器”,针对网络IO的时候,我们需要知道EAGAIN这个非常关键的调度点,掌握了这个调度点,即使没有调度器,自己也可以在epoll的基础上配合协程等用户态线程实现网络IO操作的调度,达到同步阻塞编程的目的。 我要晨读
位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 一般的,位运算比乘除法运算要快。所以,在一些服务器程序中,经常可以看到位操作的影子。另外,位运算能够实现一些特殊的功能,本文介绍了Go语言通过位运算实现 判断奇偶、求1的个数等。 我要晨读
我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一个调度器来维护这些goroutine,确保所有的goroutine都使用cpu,并且是尽可能公平的使用cpu资源。本文介绍 goroutine和调度器的实现。 我要晨读