自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 资源 (4)
  • 问答 (1)
  • 收藏
  • 关注

原创 MinIO对象读写中的分布式锁

minio的分布式锁解析

2023-12-04 22:31:01 332

原创 node_exporter源码简单解析

因为项目上用到了node_exporter,后期可能需要做些定制化,所以简单的看了下源码。在这里简单记录一下"/metrics"请求中的关键调用。

2023-08-26 14:25:59 405

原创 Golang调用linux命令

1、golang本来有一个exec.CommandContext函数用于传入带超时控制的context,用于实现超时控制。同时也发生过进程无法删除,成为僵尸进程。近期有用Golang调用外部命令的需求,期间也踩了些坑。目前开发用的操作系统是Ubuntu 22,Go的版本是1.18.3。2、SysProcAttr的Setpgid设置为true,主要是为了超时杀掉主进程时可以将命令行进程一起杀掉,避免僵尸进程。3、cmd.Wait()调用放在go协程中主要是为了避免被调用的命令行挂起时杀进程异常。

2023-04-22 11:59:48 588

原创 在virtualbox上手工搭建低硬件配置的3节点etcd集群

用virtualbox简单搭建一个低硬件配置的三节点etcd集群

2023-01-19 15:34:45 289

原创 在VSCode环境下用dlv工具的attach模式远程调试在运行中的服务

用dlv工具的attach模式远程调试在运行中的服务

2022-07-17 23:53:23 2221

原创 在VirtualBox上搭建minio集群环境,非Docker方式

1,创建虚拟主机用VirtualBox创建了4台Debian 11的主机,CPU 1核 / 内存 1GB / 硬盘 8GB + 4GB*2。虚拟硬盘具体像下面这个样子。minionode1_1这种虚拟硬盘没有装操作系统,就是想用来模拟用来做存储的磁盘。2,配置虚拟机虚拟主机默认采用NAT的方式连接网络,访问互联网是没有问题。为了虚拟机直接可以互相访问,也为了宿主机可以访问虚拟机,于是每台虚拟机都添加了第二块网卡,采用桥接方式连接。具体如下图。添加好网卡以后,需要在系统里面配...

2021-11-10 17:55:51 1571

原创 Golang中的单元测试和基准测试实践

golang本身提供了简单但功能强大的单元测试和基准测试。本文用一个查找重复次数最多的字符的函数为测试对象,对单元测试和基准测试做一个简单的实践。查找重复次数最多的字符type charCounter struct { char rune counter int}func FindMostRepeatedChar(strSlice []rune) (returnSlice []*charCounter, err error) { // 传入切片为nil时,返回异常 if ..

2021-10-03 09:59:32 311

原创 Golang的chan阻塞测试

在《The way to go - 14.2 协程间的信道》教程中看到了关于chan阻塞的相关内容,自己写代码做了一些验证。贴之前先复习一下知识点。以下是我自己的总结,如果不对还请网友指正。1,golang的通道(chan)可分为不带缓存的通道和带缓存的通道。用make函数创建通道的时候,如果不指定缓存大小,创建的就是不带缓存的通道。2,通道是一个类型化消息队列。这句话有两个意思,一是在创建通道时,需要指定通道中传输什么类型的数据。例如var c chan int,这句代码声明了一个名字叫c的通

2021-09-30 23:54:44 1377

原创 TiDB Server的main函数解析

1. 进入main函数前进入main函数前,会先执行config包的init函数。init函数中会调用initByLDFlags函数,initByLDFlags函数中有两个主要处理,如下面的代码所示。globalConf是一个原子值类型的变量,位于config包中。func initByLDFlags(edition, checkBeforeDropLDFlag string) { if edition != versioninfo.CommunityEdition { defaultCo.

2021-01-13 21:50:01 276

原创 Golang结构体中的接口类型变量说明

先看下面的代码:package mainimport "fmt"// 首先定义两个接口 TestInt1 和 TestInt2// TestInt1 is an interfacetype TestInt1 interface { func1() func2() func3()}// TestInt2 is an interfacetype TestInt2 interface { func4() func5() func6()}// TestStruct1 i

2020-12-06 11:13:32 1280

原创 基于Golong自动生成xml文件对应的struct文件的工具

通过读入xml文件,然后自动生成对应的struct,并保存再指定文件中。源代码大链接在下面,主要是xmlLoader.go和xmlNodeStructCreator.go两个文件。xmlLoader.go通过读入xml文件,将xml解析为一个链式结构数据,xmlNodeStructCreator.go通过递归的方式从链式结构数据中提取xml的节点信息并生成xml对应的结构体文件。这个做得比较粗糙,特别是结构体中field的命名,直接用节点的名字来命名的,有兴趣的朋友可以自己down下来改改。

2020-11-23 11:09:16 746

原创 TiDB启动(一)

TiDB的启动过程比较复杂,这里主要记录从runServer函数的启动过程,包括服务启动和初始化客户端连接。main包的createServer函数调用server包的NewServer函数创建server结构体的实例,NewServer函数中创建了网络监听(net.Listen)。main包的runServer函数用于整个TiDB的启动。该函数调用了server包的Run函数。具体如下:funcrunServer(){err:=svr.Run()terror....

2020-11-22 12:51:34 806

原创 GoLang解析XML,非Unmarshal方法

看网上好多都是用的Unmarshal函数,但是对于有些不知道节点数量的情况,Unmarshal函数还是无法很好完成。所以自己写了个方法,在这里记下来,免得忘了。package mainimport ( "bufio" "encoding/xml" "errors" "fmt" "io" "io/ioutil" "os")// stack 深度为10的栈,用来压入XML的标签名称。type stack struct { MaxTop int // 栈顶最大值

2020-11-01 20:02:15 1302

TiDB简单集群安装

简单的TiDB集群安装文档。采用virtual box + debain,4节点

2016-12-25

Struts2 + Spring3.1.0Release + mybatis整合

自己做的一个ssm的整合框架,带完整的jar包。自己做的几个项目都用的这个框架,可以在这个基础上整合dwr、jquery这些,很好用。

2014-12-13

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除