select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都是信道操作。我们好好看一些代码来加深理解吧。 我要晨读

已有702人晨读

Go1.9 出来后 6 个多月的时间,Go1.10 就被发布。新版本带来大大小小的变化(发行说明),但是我想谈谈有关 net/http 包的改变。1.10 版本支持在 HTTPS(commit) 上的代理,而在原来它只能通过使用普通的(未加密)HTTP 来和代理进行沟通。接下来让我们来看看它是否真的可以工作。 我要晨读

已有1023人晨读

Reflect 反射包有2个重要的类型,分别通过Typeof()和ValueOf()返回。 分别在源码包里的reflect包中的type.go和value.go 我要晨读

已有862人晨读

按照惯例,第一篇博文总要说点历史,对吧?我作为软件开发人员,主要还是使用 PHP 语言。第一次接触它还是我在高中的时候,跟一个朋友一起开发一个项目。我们想为项目建一个网站,正好发现一个用 PHP 语言,代码写得非常整齐,并且预打包的解决方案。那个时候,我完全不懂这些代码是干嘛的,也没有花时间去弄懂它。多年之后,我再次与 PHP 相遇。在我进入大学的前 6 个月(我想大约 7 年前),PHP 成了我主要关注的语言之一。两年前,我第一次经人介绍了解到 Go 语言。 我要晨读

已有568人晨读

前面docker的基本概念和一些核心原理都看的差不多了,那么现在该关注一下具体的生产环境的使用方法了。 我要晨读

已有601人晨读

Go 中的并发性是以 goroutine(独立活动)和 channel(用于通信)的形式实现的。处理 goroutine 时,程序员需要小心翼翼地避免泄露。如果最终永远堵塞在 I/O 上(例如 channel 通信),或者陷入死循环,那么 goroutine 会发生泄露。即使是阻塞的 goroutine,也会消耗资源,因此,程序可能会使用比实际需要更多的内存,或者最终耗尽内存,从而导致崩溃。 我要晨读

已有825人晨读

Go 的标准实现里 goroutine 是无主的。concurrent.UnboundedExecutor 的目标就是把 ownership 的概念加到 goroutine 上。通过把启动的goroutine都挂在一个executor上,从而可以跟踪这一组goroutine的存活状况。当需要退出的时候,可以把这些个goroutine通过context cancel的方式退出。 我要晨读

已有505人晨读

golang语言中最有特色之一的东东就是这个goroutine了,很多时候问起别人为什么golang的好用,golang的网络性能可以那么好,一般都会多多少少想到goroutine,提起goroutine。在linux中内核的调度最小单位是就是thread,同一个进程中的多个thread线程就对应内核中的多个thread实体。所以thread是内核级的,而gorountine是一个不同于thread的概念,gorountine是一个用户态,另外一种说法也就携程,是用户态的一种调度粒度,每个gorounti 我要晨读

已有712人晨读

Bolt 最初的目标是提供一个简单的纯 Go key/value 存储,并且不会使代码具有多余的特性。为此,该项目取得了成功。但是,这个范围有限也意味着该项目已经完成。 我要晨读

已有1890人晨读

大家好!我的名字叫Sergey Kamardin。我是来自Mail.Ru的一名工程师。这篇文章将讲述我们是如何用Go语言开发一个高负荷的WebSocket服务。即使你对WebSockets熟悉但对Go语言知之甚少,我还是希望这篇文章里讲到的性能优化的思路和技术对你有所启发。 我要晨读

已有576人晨读