代码的坏味道 代码的坏味道列表: 神秘的命名:代码不是直观明了的,命名无法表明自己的功能和用法 重复的代码:在一处以上的地方看到相同的代码结构 过长的函数:积极的分解函数,当感觉需要以注释来说明点什么的时候,把需要说明的东西写进一个独立的函数中,并以其用途命名 过长的参数列表 全局数据 可变数据:约束对数据的更新,降低风险 发散式变化:杂糅了不同上下文的模块因为不同的原因在不同的方向上发生变化,对某个上下文进 2023-04-24 #重构
何时去重构 在前一篇文章中,记录了为什么要去重构,在这篇文章中,我们将会聚焦于何时去重构。 在阐述何时去重构时,先了解三次法则 第一次做某事时只管去做; 第二次做类似的事时,会产生反感,但无论如何还是可以去做; 第三次做相同的事时,你就应该重构 预备性重构最佳的重构时机是在添加新功能之前。 在添加新功能之前,先检查现有的代码库,通常可以发现其中已经有类似功能的方法。可以对这些方法进行微调,避免出现重复代码 2023-04-11 #重构
优雅的处理错误 本文是对 Dave Cheney 博客的翻译, 这里是原文地址 错误只是值我花了很多时间思考在 Go 程序中处理错误的最佳方式。我真的希望有一种单一的方式来处理错误,这样我们就可以像教授数学或字母一样,教授所有的 Go 程序员。 然而,我得出结论,没有一种单一的方式来处理错误。相反,我认为 Go 的错误处理可以归类为三种核心策略。 哨兵错误第一种错误处理方式我称之为哨兵错误 1if err == 2023-04-03 #Go
重构的原则(上) 最近在重温 Martin Fowler 的 《重构》一书,在博客中记录一下阅读过程的心得笔记。 什么是重构重构是软件开发过程中经常会用到重构一次,但在使用时比较随意,Martin 则是认为这个词的使用需要更为严谨一下,因此给出了两个定义 重构作为一个名词时,是指对软件内部的一种调整,在不改变软件可观察行为的前提下,提供代码的可理解性,降低内部的修改难度。简单的理解便是,优化了程序内部的逻辑,降低 2023-03-30 #重构 #读书笔记
Golang 运行时镜像时区问题 本文主要介绍 Go 程序设置时间戳计算时间时需要注意的问题,以及如何在产出的 Go 服务镜像中设置正确的文件。 在修复一个时间相关的 bug 后,部署新服务时出现了如下的错误 1could not load time location: unknown time zone Asia/Shanghai 系统报错显示无法加载 time zone,但是这段程序在本地运行是正常的。于是开始了排查之旅。 2023-03-27 #Go
Go 低内存大文件上传 介绍当涉及到文件上传时,低内存占用的客户端是非常重要的。在本篇博客中,我们将介绍如何使用Go语言实现一个低内存占用的HTTP文件上传客户端。 流程首先,让我们先讨论一下HTTP文件上传的基本原理。HTTP文件上传是通过POST请求向服务器发送数据的。请求的头部包含文件的元数据,请求的主体则包含文件的二进制数据。由于HTTP请求和响应在网络上传输的过程中可能会被分割成多个小块,因此上传大文件时会占用 2023-02-14 #Go
使用 xtrabakup 搭建基于 GTID 的 mysql replication xtrabackup 是一个开源的高性能 MySQL 热备份工具,使用 xtrabackup 可以在备份的时候不用停止 MySQL 服务。 通过使用 xtrabackup 可以简单快速的搭建 MySQL 集群。 准备工作在使用 xtrabackup 搭建 MySQL 集群之前需要做好下面的准备: Master: 一个已经启动了的 MySQL 8.0 服务,下文称之为 Master,这个 mys 2022-08-09 #MySQL
workqueue 介绍Workqueue 是 client-go 提供的一个工作队列,主要的作用是提供一个先进先出的队列,顺序执行队列中的任务。 workqueue 与普通队列的不同之处在于,它支持对队列中的元素进行标记和去重。 workqueue 的基本特性如下: 有序:所有的元素按照添加的顺序进行处理 标记元素:标记元素是否被处理,在处理时重新排队 去重:相同的元素在同一时间不会被并发的处理,一个元素在被 2022-07-11 #Go #k8s
何时在 Go 中使用泛型 前言本文是 Go 官方博客的翻译,原文地址:when generics Go 1.18 增加了一个重要的语言特性:对泛型编程的支持。本文不会介绍什么是泛型,如何去使用泛型。而是聚焦于何时在Go代码中使用泛型,又该在何时不使用泛型。 先说明,本文只是提供一个通用的指引,而非硬性的规定。具体使用的时机取决于你的判断。但是如果你不确定是否该使用,那么你就可以遵循本文的说明。 编写代码首先是从 Go 编程 2022-04-25 #Go #泛型
搭建一个 mongo replica set 本文主要介绍如何在本地搭建一个 3 节点的mongo replica set。 准备工作 在官方的 下载中心 选择对应平台的安装包,解压并安装完成 将 mongod 以及配套的工具路径加入 $PATH 命令行终端 打开命令行,输入如下的代码: 1mongod --dbpath <data_dir> --port 27017 上面的代码将会启动一个 mongod 的实例,监听 270 2022-03-07 #mongo