Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析golang的源代码来讲解协程的实现原理. 这个系列分析的golang源代码是Google官方的实现的1.9.2版本, 不适用于其他版本和gccgo等其他实现, 运行环境是Ubuntu 16.04 LTS 64bit. 核心概念 要理解协程的实现, 首先需要了解go中的三个...
-
Golang源码探索(二) 协程的实现原理
-
如何使用VSCode中的Code Runner插件执行golang代码
个人主页 如何使用VSCode中的Code Runner 插件执行golang代码 project的文档结如下 mylab |---- main.go |---- test.go main.go package main func main() { test() } test.go package main func test() { println("in test") } 在Code Runner插件的Doc地址中 找到如下Configuration的配置说明 Configuration M...
-
理解Golang多重赋值
个人主页 Golang 的多重赋值可以用于值交换操作 两个值可以方便的如下交换: a, b = b, a 四个值同样可以如下交换 a, b, c, d = b, c, a, d 那这个交换底层是怎么实现的呢?我们来做个试验,看看这一段四值交换 golang 代码的的汇编代码 func main(){ a := 1 b := 2 c := 3 d := 4 a, b, c, d = b, c, a, d } $>dlv debug main.go Type 'help' for list of c...
-
Performance Without the Event Loop
英文原文 译文 本文基于我今年早些时候在 OSCON 所做的一场演讲。为了简明扼要,并针对我在演讲后收到的一些反馈意见进行了编辑。 谈到 Go 的时候,一个常见的说法是,Go 是一种在服务器上运行良好的语言;静态二进制文件、强大的并发性和高性能。 本文重点讨论最后两项,Go 语言和它的运行时是如何透明地让程序员编写高度可伸缩的网络服务器,而不必担心线程管理或 I/O 阻塞。 需要高效编程语言的一个依据 但在我开始技术讨论之前,我想用两个指标来说明 Go 语言的目标市场。 摩尔定律 oft mis...