/images/hugo/avatar.png

Redis Barrier

1. 背景

2.1 背景

项目上需要周期性完成一些计算任务,这些任务具有如下特点:

  1. 任务相似但是独立
  2. 任务执行需要读取过去 7 天的历史数据,但是只有当天数据会更新
  3. 任务计算的性能要求很高,需要充分利用计算资源,尽快完成计算

为了快速完成这些任务的计算,设计了如下的分布式计算系统:

Go generate

1. go generate

1.1 简介

项目构建,通常我们会依赖一些构建管理工具,比如shell脚本、make等。通过 make 我们可以在编译和构建 Go 代码之前,完成诸如 protobuf 文件生成等等编译代码所需要的前置动作。不过,Go 1.4 版本的Go工具链中增加了在构建之前驱动执行前置动作的能力,这就是go generate命令。我们看下面这个示例:

Go 常用工具

go 原生提供的工具,在 gopath 和 module-ware 两种模式上存在一些行为差异。接下来我们会分别介绍 go 原生工具在这两种模式下的使用。

1. go get

go get 用于获取 Go 包及其依赖包

常用命令如下:

Go reflect

1. 反射

Go在标准库中提供的reflect包让Go程序具备运行时的反射能力(reflection,又称为自省)。反射是程序在运行时访问、检测和修改它本身状态或行为的一种能力,各种编程语言所实现的反射机制各有不同。Go语言的interface{}类型变量具有析出任意类型变量的类型信息(type)和值信息(value)的能力,Go的反射本质上就是利用interface{}的这种能力在运行时对任意变量的类型和值信息进行检视甚至是对值进行修改的机制。