• Go 中的匿名函数和反射

    我最近在浏览 Hacker News 时看到一篇吸引我眼球的文章《[Python中的Lambdas和函数](http://www.thepythoncorner.com/2018/05/lambdas-and-functions-in-python.html?m=1)》,这篇文章 —— 我推荐你自己阅读一下 —— 详细讲解了如何运用 Python 的 lambda 函数,并举了一个例子展示如何使用 Lambda 函数实现干净,[DRY](https://en.wikipedia.org/wiki...

  • Go 语言中的 Monkey 补丁

    很多人认为 monkey 补丁只能在动态语言,比如 Ruby 和 Python 中才存在。但是,这并不对。因为计算机只是很笨的机器,我们总能让它做我们想让它做的事儿!让我们看看 Go 中的函数是怎么工作的,并且,我们如何在运行时修改它们。本文会用到大量的 Intel 汇编,所以,我假设你可以读汇编代码,或者在读本文时正拿着[参考手册](https://software.intel.com/en-us/articles/introduction-to-x64-assembly). **如果你...

  • 什么我不能将这个函数作为一个 Http Handler 来传递?!

    当我帮助人们学习网页开发时,一个超级常见的问题是,“为什么我不能把这个函数传入 `http.Handle` 方法中?它看起来与 `http.HandlerFunc` 是一模一样的!” ```go func demo(h http.Handler) {} func handler(w http.ResponseWriter, r *http.Request) {} func main() { // 这行代码在编译时会报错 demo(handler) } ``` >...

  • Go 语言中的包是怎么工作的

    自从我开始用 Go 写代码以来,如何组织好代码并用好 package 关键字对我来说一直是个迷样的难题。package 关键字类似于 C# 中的命名空间,但是它的约定却是将 package 名字与目录结构绑定在一起。 Go 语言有一个网页试图解释如何编写 Go 代码。 http://golang.org/doc/code.html 当我开始用 Go 编程时,这是我最开始读的资料之一。可能因为之前一直在 Visual Studio 中工作,代码被解决方案和项目打包的很好,这个文档...

  • 120
    使用 ReJSON 在 Redis 中保存 Go 结构体

    ![image](https://raw.githubusercontent.com/studygolang/gctt-images/master/rejson/1_w3hPEpsPFtHs36dJMUdl7w.jpeg) > 图像授权 https://Redislabs.com/blog/Redis-go-designed-improve-performance/ 大部分人可能对 Redis 都很熟悉了。对于外行人来说,Redis 是最广为人知并广泛应用的数据库/缓存产品,起码也是...

  • Go 语言中的作用域

    理解 Go 语言中的作用域是怎么起作用的,需要一些关于块的预备知识,这在 “[Go 语言中的代码块](https://studygolang.com/articles/12632)” 文章中有讲。 一个标识符的作用域是标识符与某个值,比如变量、常量、包等,进行绑定的那一部分源码(有时甚至是全部)。 ```go package main import "fmt" func main() { { v := 1 { ...

  • 如何泄漏一个协程然后修复它

    很多 go 语言开发者都知道这句格言,[永远不要启动一个你不知道如何停止的协程](https://dave.cheney.net/2016/12/22/never-start-a-goroutine-without-knowing-how-it-will-stop),但是泄漏一个协程还是超级的简单。让我们看一种常碰到的泄漏协程的方式,然后修复它。 为了实现这个,我们先建立一个包含一个自定义 `map` 类型的库,这个 `map` 类型的 key 在经过了一段可配置的时间后过期。我们把这个库...

  • 以 SQL 作为 API

    如果你不是在石头下住着,那么你也应该听过最近兴起一种新的对“函数作为服务”的理解。在开源社区,Alex Ellis 的 [OpenFaas](https://github.com/openfaas/faas) 项目受到了很高的关注,并且 [亚马逊Lambda宣布对Go语言的支持](https://aws.amazon.com/blogs/compute/announcing-go-support-for-aws-lambda/)。这些系统允许你按需扩容,并且通过 API 调用的方式来调用你的 ...