go语言的一个重大特色就是支持协程(coroutine)。为了更好的了解goroutine,有必要谈谈goroutine调度模型的实现。在看了一些goroutine scheduler资料后,本文从另一个角度切入,描述下一个简单的协程调度模型如何实现。 我要晨读

已有1772人晨读

Go语言默认的 sync.RWMutex 实现在多核环境中表现并不佳,因为所有的读者在进行原子增量操作时,会抢占相同的内存地址。该文探讨了一种 n-way RWMutex,也可以称为“大读者(big reader)”锁,它可以为每个 CPU 内核分配独立的 RWMutex。 我要晨读

已有1512人晨读

退出运行中的程序,可以粗暴的kill -9 $PID,但这样会破坏业务的完整性,有可能一个正在在执行的逻辑半途而费,从而产生不正常的垃圾数据。本文总结在go语言中,如何能优雅的退出网络应用,涉及的知识包括:signal,channel,WaitGroup等。 我要晨读

已有1589人晨读

对于这样一长串信息:gc5(6): 11+12+357+77 us, 0 -> 1 MB, 4294 (5261-967) objects, 67/2/0 sweeps, 6(115) handoff, 6(9) steal, 170/56/5 yields,你明白它们的含义吗?目前 GC 还是 Go 的一个需要不断改进的点。本文介绍 Golang的GC信息。 我要晨读

已有2499人晨读

Golang使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。Golang中包的定义和使用看起来十分简单,然而里面却有很多知识点。本文理解Golang包导入。 我要晨读

已有1469人晨读

默认情况下,向一个hash表插入的元素是没有固定顺序的。但是因为很多原因,比如有一些帖子就指出了不是所有的map都是hash表(而且有些语言还有有顺序的hash表,比如java的TreeMap),我还是能够了解为什么很多人会假定遍历map元素的顺序和向map插入元素的顺序是相同的。作者认为这是Go设计的一个绝妙之处。 我要晨读

已有1798人晨读

socket 编程,可能会碰到 粘包 问题。我们和客户端约定数据交互格式是一个json格式的字符串,当客户端发送数据给服务端的时候,如果服务端没有及时接收,客户端又发送了一条数据上来,接收缓冲区满了的话,那么也有可能接收到半截的json字符串。本文介绍golang中tcp socket粘包问题和处理。 我要晨读

已有1278人晨读

陆陆续续晨读过不少 goroutine 和 channel 的文章,今天继续来一篇,这篇是作者在实践的过程中,产生了几种通过goroutine + channel实现的工作模型,本文分别对这些模型进行介绍。 我要晨读

已有2628人晨读

Go语言移植Linux内核数据结构hlist:hlist(哈希链表)可以通过相应的Hash算法,迅速找到相关的链表Head及节点。在有些应用场景,比Go标准库提供的list(一种常见的双向链表)更合适。依照list.h中的源码,本文实现了一个Go语言版本的hlist例子。 我要晨读

已有1226人晨读

随着Go的不断发展,开源库越来越多。这里有一个开源库列表,欢迎收藏,需要时查阅。另外,awesome 序列的 Go 成员,也是很全的开源库列表。 我要晨读  相关阅读: 网页链接 

已有1939人晨读

问题:当有一个变量,有一个 goroutine 会对它进行写操作, 其他 goroutine 对它进行读操作。是否需要对这个变量进行加锁保护?本文谈谈go语言编程的并发安全。 我要晨读

已有1367人晨读

近期在构思一个产品,考虑到安全性的原因,可能需要使用到HTTPS协议以及双向数字证书校验。之前只是粗浅接触过HTTP(使用Golang开 发微信系列),但对HTTPS、数字证书等的基本原理并未求甚解。于是想趁这次的机会,对HTTPS做一些深度挖掘。主要途 径:翻阅网上资料、书籍,并利用golang编写一些实验examples。 我要晨读

已有1659人晨读

今天继续来一个Go语言的”坑“:Go语言 http/FormValue 踩坑记。国内初学者使用 Go 写 Web 的居多,在使用 net/http 库时,不小心很有可能会遇到本文提到的一个“坑”。 我要晨读

已有1737人晨读

Golang语言相对成熟了,但真正写起来,还是要注意一些“坑”的,下面是遇到的三个问题(误用定时器,狂占CPU、小心list.List的Delete逻辑和要给template起个正确的名字),这里分享出来,希望能对遇到同样问题的童鞋有所帮助。 我要晨读

已有1864人晨读

在Go语言中有一些调试技巧能帮助我们快速找到问题,有时候你想尽可能多的记录异常但仍觉得不够,搞清楚堆栈的意义有助于定位Bug或者记录更完整的信息。本文将讨论堆栈跟踪信息以及如何在堆栈中识别函数所传递的参数。 我要晨读  相关阅读: 网页链接 

已有2171人晨读

Golang编程经验总结:本文总结了 Go 语言使用的方方面面,包括库的选择、注意事项,错误处理,如何进行调试,避免发生竞态条件等,是值得收藏的文章。 我要晨读

已有1491人晨读

遍历目录中所有文件,这个需求是很常见的,各个语言都有相应的处理方式。然而,如果获取 Windows 下的隐藏文件?Go 语言如何实现?本文介绍如何访问 System Volume Information 文件夹。 我要晨读

已有1639人晨读

Gopher China 在上海顺利举行。今天的文章跟 Gopher China 的主要组织者 ASTA谢 开发的 Beego 框架相关,算是支持 Go 在国内的发展。beego下实现martini中的透明式静态文件服务(static folder)效果。服务静态文件,相信不少人都遇到过一些问题。 我要晨读

已有2300人晨读

并发语言俨然是应大规模应用架构的需要而提出,有其现实所需。前后了解了Scala和Golang,深深体会到现代并发语言与旧有的Java、C++等语言在风格及理念上的巨大差异。本文主要针对Scala和Golang这两个我喜爱的并发语言在并发特性上的不同实现,做个比较和阐述,以进一步加深理解。 我要晨读

已有1605人晨读

我们知道goroutine是协程的go语言实现,它是语言原生支持的,相对于一般由库实现协程的方式,goroutine更加强大,它的调度一定程度上是由go运行时(runtime)管理。其好处之一是,当某goroutine发生阻塞时(例如同步IO操作等),会自动出让CPU给其它goroutine。本文和大家一起理解goroutine。 我要晨读

已有1646人晨读