跳转至

2020 年

Golang源码分析系列之官方Context包

Context简介

Context是由Golang官方开发的并发控制包,一方面可以用于当请求超时或者取消时候,相关的goroutine马上退出释放资源,另一方面Context本身含义就是上下文,其可以在多个goroutine或者多个处理函数之间传递共享的信息。

创建一个新的context,必须基于一个父context,新的context又可以作为其他context的父context。所有context在一起构造成一个context树。

context tree

Golang设计模式系列之工厂方法模式

定义

工厂方法模式(Factory Method Pattern)也称为工厂模式(Factory Pattern)。同简单工厂模式一样,工厂方法模式也是一种创建型设计模式。不同于简单工厂模式的都是通过同一个具体类(类的静态方法)或者函数来创建对象,工厂方法模式是通过一系列实现创建对象接口的具体子类来创建对象。即:

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

Golang中几种通道死锁典型案例

Golang中通道是进行数据同步一个重要手段,当主进程读取空通道,或者向没有协程读取的通道写入时候,都会发生死锁现象(编译时候提示fatal error: all goroutines are asleep - deadlock!)。下面列出几个常见死锁情况。

《深入理解程序设计》读书笔记

计算机体系结构

冯诺依曼体系

冯诺依曼计算机体系

当前计算机主要是基于冯诺依曼体系结构设计的,主要由五大部件组成:

  1. 存储器用来存放数据和程序

  2. 运算器主要运行算数运算和逻辑运算,并将中间结果暂存到运算器中

  3. 控制器主要用来控制和指挥程序和数据的输入运行,以及处理运算结果

  4. 输入设备用来将人们熟悉的信息形式转换为机器能够识别的信息形式,常见的有键盘,鼠标等

  5. 输出设备可以将机器运算结果转换为人们熟悉的信息形式,如打印机输出,显示器输出等

Golang设计模式系列之简单工厂模式

定义

简单工厂模式是一种创建型设计模式,一般又称为静态工厂方法(Static Factory Method)模式。这种模式通过一个静态方法或者函数来达到隐藏正在创建的实例的创建逻辑目的

客户端仅与工厂方法交互,并告知需要创建的实例类型。工厂方法与相应的具体产品进行交互,并返回正确的产品实例。

深入了解golang中的defer关键字

golang中的defer关键字是用来声明一个延迟函数,一般称这个函数为defer函数,该函数会在defer语句所在的函数返回之前会执行。通过defer关键字,我们可以修改函数命名返回值,进行资源释放等操作,总的来说defer函数有如下特点和功能:

  • 函数返回之前执行
  • 可以放在函数中任意位置
  • 可以同时设置多个defer函数,多个defer函数执行遵循FILO顺序
  • defer函数的传入参数在定义时就已经明确
  • 可以修改函数中的命名返回值
  • 用于文件资源,锁资源、数据库连接等释放和关闭
  • 和recover一起处理panic

本文将介绍defer上面的几个特性,如果想深入了解defer底层实现机制,可以阅读笔者写的《深入Go语言之旅 - 基础篇 - defer函数》

defer会在函数返回之前执行

当程序执行一个函数时候,会将函数的上下文(输入参数,返回值,输出参数等信息)作为栈帧放在程序内存的栈中,当函数执行完成之后,设置返回值并返回,此函数才真正完成执行。

defer语句函数会在函数返回之前执行,下面程序将会依次输出B A:

func main() {
    defer fmt.Println("A")
    fmt.Println("B")
}

Golang设计模式系列开篇

抽象是用来处理复杂性的主要工具。一个问题越复杂,就越需要抽象来解决

概念

设计模式这个术语是由Erich Gamma等人在1990年代从建筑设计领域引入到计算机科学的。在《Domain-Driven Terms》一书中,设计模式被描述为:

设计模式是命名、抽象和识别对可重用的面向对象设计有用的的通用设计结构。设计模式确定类和他们的实体、他们的角色和协作、还有他们的责任分配

每一个设计模式都聚焦于一个面向对象的设计难题或问题。它描述了在其它设计的约束下它能否使用,使用它后的后果和得失

使用Consul作为配置中心的一种解决方案

最近上线了go语言写的一个接口服务,由于接口服务是分布式部署的,服务的配置就需要使用分布式配置中心来管理。在调研了其他配置中心工具方案后,最终采用了Consul作为配置工具。一方面其学习成本较低,二来Consul本身作为服务注册和发现工具,可以一次学习多次适用。

《统计思维》读书笔记之描述性统计量

清明放假三天,闲来无事,拿起角落里吃灰蛮久的《统计思维》一书聊以打发。现把读书笔记结合收集的相关资料内容记录如下。

描述性统计量

描述性统计是一种汇总统计,用于定量描述或总结信息集合的特征。描述性统计又分为集中趋势(Measures of central tendency)和离散趋势(Measures of Dispersion)

均值

均值(Mean),即所有数据相加后的总和除以数据的个数得出的结果, 也称算术平均值。设一组样本数据为x1,x2,...,xn,样本数据的个数为n,则均值为:

均值计算公式