• Go 调度器的任务窃取(Work-Stealing)

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-work-stealing-in-go-Scheduler/cover.png) > Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French. ℹ️ *这篇文章基于 Go 1.13 环境。* ...

  • Go 中记录 HTTP 请求

    如果你有运行的 HTTP 服务,你可能想记录 HTTP 请求。 请求日志有助于诊断问题。(哪些请求失败了?我们一天处理多少请求?哪些请求比较慢?) 这对于分析是必需的。(哪个页面受欢迎?网页的浏览者都来自哪里?) 这篇文章介绍了在 Go Web 服务器中,记录 HTTP 请求日志相关的全部内容。 这不是关于可复用的库,而是关于实现你自己的解决方案需要知道的事情,以及关于我日志记录的选择的描述。 你可以在示例应用上查看详细内容: https://github.com/...

  • Go 中的垃圾回收:第一部分 - 基础

    这是三篇系列文章的第一篇博文,系列文章提供了 Go 中垃圾回收背后的机制和概念的理解。这篇博文主要介绍回收器的基础概念。 三篇系列文章的索引: 1) [Go 中的垃圾回收:第一部分 - 概念](https://studygolang.com/articles/21569) 2) [Go 中的垃圾回收:第二部分 -GC 追踪](https://studygolang.com/articles/21570) 3) 即将诞生 ## 简介 垃圾回收器负责跟踪堆内存分配,释放无...

  • 效仿 Golang 中的枚举类型

    在这篇博文中我们看到使用 `go generate` 和遍历抽象语法树来生成强大的枚举类型。 博文的结果是一个生成枚举类型的客户端。[全部代码](https://github.com/steinfletcher/gonum) 都可以在 Github 上面找到。 ## Go 惯用技巧 Go 并没有对枚举类型提供一流的支持。模拟枚举类型的一种方法是,将一系列相关的常量定义为一个新的类型。Iota 可用于预定义连续自增的整形常量。我们可以像下面这样定义一个 `Color` 类型。 ...

  • Golang 中的依赖注入之使用更高阶的函数

    你可以找到一个完整的代码示例在[github.com/steinfletcher/func-dependency-injection-go](https://github.com/steinfletcher/func-dependency-injection-go)。例子包含了一个暴露 REST 接口的 http 服务器。 ## 简介 在这篇博文我们介绍一种 Go 中依赖注入的方式 -- 使用更高阶的函数和闭包。 考虑下以下返回用户资料的 domain 层函数。 ```g...

  • 优雅关闭的 Go Web 服务器

    在这篇博文里我想要给你们展示下,如何创建一个可以优雅关闭的 Go HTTP Web 服务器。通过这个方法可以让服务器在它真正关闭之前清理某些资源,( 例如 ) 想象下完成数据库事务或者一些其他长时间的操作。我们将会用到在我[关于并发的博文](https://marcofranssen.nl/concurrency-in-go/) 学习到的东西。所以,期待看到 channel 和 Goroutine 作为解决方法的一部分吧。 当我建立新的 http 服务器,我通常通过使用命令行标志提供端口号...

  • Go:切片陷阱

    ## 前言 我最喜欢 Go 的一个特性就是,毫无惊喜。某些程度上可以说有点无聊的感觉。这是编程语言的一个优秀的品质。这样的话,在编码的时候就可以专注于手头上的问题,而不是[语言做了你不希望它做的事情](https://twitter.com/chordbug/status/1092824183124488192?s=19)。 这篇文章有关 Go 的一个对新人来说最 "惊喜" 的特性 : slice。 ## 基本用法 如果你了解如何使用 Go slice, 请跳到下一节。 ...