Dingding's Blog

希望多年后我依然能坚持在这里...

Go: 监控模式

首发于:https://studygolang.com/articles/23658 Go: 监控模式 Go 能实现监控模式,归功于 sync 包和 sync.Cond 结构体。监控模式允许 goroutine 在进入睡眠模式前等待一个定特定条件,而不会阻塞执行或消耗资源。 条件变量 我们举个例子,来看看这个模式可以带来的好处。我将使用 Bryan Mills 的演示文稿中提供的...

ORM vs. 非 ORM

首发于:https://studygolang.com/articles/23459 ORM vs. 非 ORM 我一直很喜欢使用 Go 的 database/sql 包来处理数据库。最近,一些涉及 Gorm 的问题激起了我对 Go 中 使用 ORM vs. 直接使用 database/sql 的好奇心。在 ORM 方面曾有过丰富的经验,所以我决定开始一个实验:利用 Gorm 和 非 O...

闲谈 Go 1.13 的错误处理

首发于:https://studygolang.com/articles/23462 闲谈 Go 1.13 的错误处理 Go 1.13 丰富了 errors 包。这些新增部分源自 Go2 的错误监控提议。那么让我们看看都有些啥吧 ~ Go 的错误是任意实现 error 接口的值。 // The error built-in interface type is the conventi...

Go:关于 Cobra 的想法

首发于:https://studygolang.com/articles/23438 Go:关于 Cobra 的想法 Cobra 是 Golang 生态系统中最着名的项目之一。它简单,高效,并得到 Go 社区的大力支持。让我们来深入探索一下。 设计 Cobra 中的 Command 是一个具有名称,使用描述和运行逻辑函数的结构体: cmd := &cobra.Comma...

用 Go 构建不可变的数据结构

首发于:https://studygolang.com/articles/23435 用 Go 构建不可变的数据结构 共享状态是比较容易理解和使用的,但是可能产生隐晦以至于很难追踪的 bugs。尤其是在我们的数据结构只有部分是通过引用传递的。切片就是这么一个很好的例子。后续我会作出更加详细的讲解。 在处理经过多级变换或状态的数据时,不可变数据结构是非常有用的。不可变仅意味着原始结构...

现代垃圾收集策略 —— Go 的 GC 策略

首发于:https://studygolang.com/articles/23377 现代垃圾收集策略 —— Go 的 GC 策略 在 Hacker News 和 Reddit 你可以找到相关讨论 我最近看过很多文章,它们以令我困扰的方式推广 Go 语言最新的垃圾收集器。其中一些文章来自 Go 官方项目本身。他们声称这意味着 GC 技术已经有根本性的突破。 这是新版本(Go 1....

避免诸如 base、util、common 之类的包名

首发于:https://studygolang.com/articles/23310 避免诸如 base、util、common 之类的包名 写一个好的 Go 语言包的开端是起一个好名字。将你的包名视为一个 elevator pitch,你必须用一个单词来说明。 包名不好的一个普遍的原因是被命名为 utility,这些包混合了 helpers 和 utility 代码,还包含了各种各样...

Go:Context 和传播取消

Go:Context 和传播取消 首发于:https://studygolang.com/articles/23240 context 包在 Go 1.7 中引入,它为我们提供了一种在应用程序中处理 context 的方法。这些 context 可以为取消任务或定义超时提供帮助。通过 context 传播请求的值也很有用,但对于本文,我们将重点关注 context 的取消功能。 默...

Go 最小硬件编程(第二部分)

Go 最小硬件编程(第二部分) 首发于:https://studygolang.com/articles/23085 在本文 第一部分 的结尾,我说过要写一下关于 接口 的东西。我不想在这里写一篇完整或是简短的关于接口的讲稿。相反,我将会举一个简单的例子,用以说明如何定义和使用接口,同时知道如何利用通用的 io.Writer 接口。同时有少量关于 reflection 和 semih...

Go:Test 包不为人知的一面

Go:Test 包不为人知的一面 首发于:https://studygolang.com/articles/23050 Go 被用得最频繁的命令我想应该是go test。然而,这个命令一些有趣的细节和用法可能你还不知道哟。下面让我们从测试本身讲起。 规避缓存的习惯用法 如果连续两次运行同一份测试且第一次完全通过的话,会发现测试只真正被运行了一次。事实上,所有测试都采用缓存机制来避...