• 120
    Go:Goroutine 的切换过程实际上涉及了什么

    ![Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-what-does-a-goroutine/1.png) 本文基于 Go 1.13 版本。 Goroutine 很轻,它只需要 2Kb ...

  • Go 中的 Goroutine 和其他并发处理方案的对比

    Go 语言让使用 Goroutine 和通道变得非常有吸引力,作为在 Go 中进行并发的主要方式,它们是被有意识的提出的。因此对于你所遇到的任何与并发相关的问题,它们都可能成为首选方案。但是我不确定它们是否适合于我遇到的所有问题,我仍在考虑其中的平衡点。 通道和 Goroutine 对于查询共享状态(或从共享状态中获取某些信息)这类问题看起来似乎并不完全契合。假设你想要记录那些与服务端建立 TLS 通信失败的 SMTP 客户端的 IP,以便在 TLS 握手失败的情况下,不再提供 TLS 通...

  • 在 Go 语言中,有时 nil 并不是一个 nil

    今天,我遇到了一个 [Go FAQ](http://golang.org/doc/faq#nil_error)。首先,作为一个小小的 Go 语言测验,看看您是否在 Go playground 中运行该程序之前就能推断出它应该打印出的内容(我已经将程序放在侧边栏中,以防它在 Go playground 上消失)。该程序的关键代码是: ```go type fake struct { io.Writer } func fred (logger io.Writer) { if l...

  • 构建一个快速的现代化网络爬虫

    很久以来,我一直对网络爬虫充满热情,特别是它背后的理论。我曾经使用过许多语言来构建它,例如:C++、JavaScript(Node.JS)、Python 等。 但是首先,什么是网络爬虫? ## 什么是网络爬虫? 网络爬虫是一个计算机程序,它通过浏览互联网来将现有的网页、图像、PDF 等编入索引,并允许用户使用[搜索引擎](https://en.wikipedia.org/wiki/Web_search_engine)来检索这些内容。 这基本上就是著名的[谷歌搜索引擎](http...

  • 120
    Module 第 1 部分:为什么和做什么

    ## 引言 Module 针对自 Go 语言初版发布以来即成为开发者痛点的三个关键问题提供了完整的解决方案,使得开发者: * 能够在 GOPATH 工作区之外使用 Go 代码; * 能够对依赖包进行版本控制并识别可以使用的最兼容版本; * 能够使用 Go 原生工具来管理依赖包; 随着 Go 语言 1.13 版本的发布,这三个问题已经成为了“过去时”。在过去的两年中,Go 语言团队花费了很多精力才让所有人达到这一步。在本文中,我将重点介绍从 GOPATH 到 module 的...