使用expect构建命令行自动化交互程序
背景介绍
expect 是由Don Libes基于Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率
Go构建文件系统监控
在很多场景下我们需要用到文件系统监控,比如构建配置的热加载,词典的触发备份等,之前我写过一个基于轮训实现的文件系统监控 kwatcher,现在再看的话发现有很多地方不足
- 效率低。对于不经常变动的文件,每隔几秒的检查是多余的
- 时效性低。时延最大达轮训间隔时间。
Goroutine泄露问题
Go语言学习之反射
简介
Go反射提供了一种可以在运行时(runtime)操作任意类型对象的能力。
在Go的反射定义中,任何接口都会由两部分组成的,一个是接口的具体类型(Type),一个是具体类型对应的值(Value)。
更精确的描述是,value指的是实现接口的底层具体数据,type指的是数据的完整类型
|
|
如何写好项目文档
go语言错误处理
简介
目前没有go官方的错误处理规范,通常每个人会有自己的实现,本次梳理几种可行的错误处理实现
方案一: 利用嵌套错误
什么是嵌套错误
Go1.13在errors和fmt标准库包中新增了功能以简化处理包含其他错误的错误。其中最重要的是一个约定: 包含一个错误e2的错误e1可以实现Unwarp方法来返回所包含的底层错误,简单来说,如果e1包装了e2,你可以Unwrap e1来得到e2。
Unwrap 得到的底层错误本身可能也具有Unwrap方法,我们将这种通过重复Unwrap得到的错误序列称为错误链
解析sync.Pool
介绍
特定场景下某对象需要频繁地创建,这种操作可能会影响程序性能,大致原因是2个:
1.创建对象需要申请内存
2.频繁创建对象,会对GC造成较大压力
为解决这个问题sync.Pool
诞生了,sync.Pool简单理解就是对象池,其官方说明如下
- 对象池是一批可被独立存放获取的临时文件的集合
- 对象池中的对象会在任意时间被移除(无通知)
- 对象池是并发安全的
通俗的讲对象池其主要做了几个事情
1.复用之前对象,不用每次新建
2.预创建对象,不用临时创建
3.采用性能更高的存储做缓存,提高响应速度
A Pool is a set of temprary objects that may be individually saved and retrieved
Any item stored in the Pool may be removed automatically at any time without notification. If the Pool holds the only reference when this happens,the item might be deallocated
A Pool is safe for use by multiple goroutines simultaneously.