• Golang 下的微服务 - 第 8 部分 - Kubernetes 和 容器引擎

    [上一篇博文](https://studygolang.com/articles/12799) 我们看了看用 [Terraform](https://terraform.io/) 创建容器引擎集群。在本篇博文里,我们看看使用容器引擎和 [Kubernetes](https://kubernetes.io/) 部署容器到集群里。 ## Kubernetes 首先,什么是 [Kubernetes](https://kubernetes.io/) ? [Kubernetes](https:...

  • 120
    探索 Go 中的对象(object)

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-object/goexplorer.png) 当我接受了 Go 根本没有 object 之后,我才开始更容易理解 Go 的 object 是什么,其实就是一些可以操作共有状态的函数集合,加了点语法糖的点缀。 你可能心想“闭嘴吧,Go 当然有 object”,或者想“能操作共有状态的函数集合就是 object 的定义啊”,好吧,也许你是对的。 ...

  • 120
    Golang 之于 DevOps 开发的利与弊(六部曲之四):time 包和方法重载

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go_devops/golang-pros-cons-4-time-package-method-overloading.png) 万众期待的 Golang 之于 DevOps 开发的利与弊 系列终于回归了!在这篇文章,我们讨论下 Golang 中的 time 包,以及 go 语言中为什么不使用方法重载。 如果你没有读 [最近一篇](https:/...

  • 实现一个 Golang 调试器(第一部分)

    写这个系列的目的不是为了列出 Golang 编程语言的调试器的所有特性。如果你想看这些内容,可以看下 [Delve](https://github.com/derekparker/delve)。在这篇文章里我们试着去探索下调试器通常是怎样工作的,怎么在 Linux 上完成一个基本的调试,Linux 上比较关心 Golang 的功能,比如 [goroutine](https://golang.org/ref/spec#Go_statements) 。 创建调试器没那么简单。就这一个话题我们单...

  • goroutine 和 channel 不可滥用

    我以前觉得使用 goroutine 和 channel 的性能开销是基本忽略不计的--尤其是和 IO 的性能开销相比--但是最近我做了一个实验,实际验证了下。 我在给[我的课程项目](https://bradfieldcs.com/courses/databases/)做一个[玩具相关的数据库](https://github.com/robot-dreams/zdb2)。一开始,我从 CSV 文件里加载数据表,后来我需要添加一个二进制的表格结构。不幸的是,第一次尝试(加载二进制表格)的效果...

  • Golang 中的微服务-第 4 部分-使用 JWT 做认证

    在之前的文章里,我们创建了一个用户服务,保存了一些用户。现在我们看下如何在用户服务中安全的保存用户密码,同时,通过微服务写几个功能,来验证用户,发布安全令牌。 注意,我现在已经把我们的服务拆分到几个不同的仓库里。 我觉得这样部署起来容易些。 最开始我打算做成一个单独的仓库,但是发现用 Go 的 dep 管理有点麻烦,有很多冲突。我也会说明下如何独立地运行和测试微服务。 遗憾的是,用这种方法我们就不能用 docker-compose 了。 不过目前用起来还不错。如果你在这方面有什么建议...

  • Go 系列教程 —— 13. Maps

    欢迎来到 [Golang 系列教程](/subject/2)的第 13 个教程。 ## 什么是 map ? map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 ## 如何创建 map ? 通过向 `make` 函数传入键和值的类型,可以创建 map。`make(map[type of key]type of value)` 是创建 map 的语法。 ```go personSalary := make(map[str...