• 利用 GoLand 和 Mozilla rr 项目来调试

    调试器。传统上,它们被用来发现复杂的 bug 并解释它们是如何发生的。但是,如果您无法解释为什么在步骤之间会发生一些更改,该怎么办呢?这就是典型调试器无法帮助您的地方,因为它们通常只会让您继续执行。 正如我们在前一篇文章中所看到的,虽然可以使用[核心转储](https://blog.gopheracademy.com/advent-2018/postmortem-debugging-delve/),但它们并不总是告诉您应用程序中发生的事情的全部情况。 输入可逆的调试器。这些调试器不仅...

  • 迁移到 mod 只需 3 个步骤

    本文的目的是演示如何轻松地将带有 vendor 目录的旧项目迁移到使用 Go mod 的新项目。 ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/migrating-to-go/1_a-NrrpFPmj-_JQGulalCdQ.png) 我不打算一一列举相对于使用依赖关系关联工具,使用 Go modules 的优势,因为在互联网上有几篇关于这方面的文章。另一方面,**我将指导您如何迁移项目**。...

  • Go 中的 channel 解析— Go 中的并发性

    ## 什么是 channel ? **channel** 是一个通信对象,goroutine 可以使用它来相互通信。 从技术上讲,channel 是一个用于数据传输的管道,可以将数据**传入或从中读取**。 因此,一个 Goroutine 可以将数据发送到一个 channel ,而其他 Goroutine 可以从同一个 channel 读取该数据。 ## 声明一个 channel Go 提供 `chan` 关键字来创建一个 channel。channel 只能用于传输**一种数...

  • Goroutine 泄露 - 被遗忘的发送者

    ## 引言 并发编程允许开发人员使用多个执行路径解决问题,并且通常用于提高性能。并发并不意味着这些多路径是并行执行的;它意味着这些路径是无序执行的而不是顺序执行。从历史上看,使用由标准库或第三方开发人员提供的库可以促进这种类型的编程。 在 Go 中,语言本身和程序运行时内置了 Goroutines 和 channel 等并发特性,以减少或消除对库的需求。这很容易在 Go 中编写并发程序时造成错觉。在你决定使用并发时必须要谨慎,因为如果没有正确使用它那么就会带来一些稀罕的副作用或陷阱。...

  • 在 Go 中实现并发性

    如果要我从 Go 的特性中选一个最棒的,那么必定是它内置的并发模型。Go 不仅支持并发,而且做的相当好。Go 语言并发模型和并发性的关系就好像是 Docker 和虚拟化一样。 ## 什么是并发? 在计算机编程中,**并发性是计算机同时处理多个任务的能力**。例如,如果您在浏览器中上网,同一时刻可能会发生很多事情。在特定情况下,你可能会在你**当前浏览的网页上**听歌的同时下载一些文件。因此浏览器需要能够同时处理很多事情。如果浏览器无法立即处理它们,您需要等到所有下载完成后再开始浏览互...