后端技术总结

  • 首页
  • github
  • About Me
Golang

Golang之defer

背景 defer在golang中属于关键词,主要用于资源释放,会在函数返回之前被调用,但其中也包含了很多的坑。下面我们通过几个常见例子来进行相关的讲解。 例子 // e.g.1 func f1() (r int) { defer func() { r = r + 5 }() return 1 } // e.g.2 func f2() (r int) { t := 5 defer func() { t = t + 5 }() return t } // e.g.3 func f3() (r int) { t := 5…

2021年4月21日 0条评论 953点热度 0人点赞 PingD 阅读全文
Golang

Go之底层利器-AST遍历

背景 最近需要基于AST来做一些自动化工具,遂也需要针对这个神兵利器进行一下了解研究。本篇文章也准备只是简单的讲解一下以下两个部分: 通过AST解析一个Go程序 然后通过Go的标准库来对这个AST进行分析 AST 什么是AST,其实就是抽象语法树Abstract Syntax Tree的简称。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。 主菜 开胃提示语 以下内容有点长,要不先去买点瓜子,边磕边看? 编…

2021年4月21日 0条评论 2280点热度 2人点赞 PingD 阅读全文
脚本

sh、bash和zsh区别

简介 Shell是一种脚本语言,是用户使用Linux的桥梁,要让这些脚本语言run起来,就必须要有解释器来执行这些脚本。而sh、bash、zsh就是脚本解释器,习惯上把它们陈祚一种shell,我们常说有多少种shell,其实说的就是shell脚本解释器。 sh Bourne Shell,是一个早期的重要shell,1978年由史蒂夫·伯恩编写,并同Version 7 Unix一起发布。 bash Bourne-Again Shell,是一个为GNU计划编写的Unix shell。1987年由布莱恩·福克斯创造。主要…

2020年11月4日 0条评论 2565点热度 3人点赞 PingD 阅读全文
Golang

Go json裁剪

背景 项目中遇到一个使用场景:服务端要保存用户上传的json格式示例,但是服务端针对这个json格式示例有大小限制,比如1KB,超过这个大小后服务端就不能正常保存了。此时用户正好手里有个比较大(>1KB)的json示例,他要想将这个示例正常保存可以进行两种不同操作: 手动去裁剪这个json字符串; 通过智能的方式自动将一些重复且不必要的数据删除掉,以达到json裁剪的目的 显然,针对第一种方式不太明智,那我们如果采用第二种方式的话,又该怎么做呢? 操刀 在Go里面,我们引用官方标准库encoding/json…

2020年10月30日 0条评论 935点热度 0人点赞 PingD 阅读全文
Golang

golang 判断interface是否为空nil

前言 interface很好用,可以存取任意类型,但我们在使用这个值类型的时候我们往往又需要知道该interface是属于哪种类型的,以便正确使用这个值。比如,如果我们提前知道该interface为int,则都是这样使用: var a interface{} a = 5 fmt.Println(2*a.(int)) 而往往我们interface可能会存放多种不同类型的数据,为了健壮,在使用时我们需要判断interface里面存放的到底为何种类型的数据,以及这些数据是否为空?比如你引用了一个类型里面的空对象是很容易引…

2020年9月2日 0条评论 3026点热度 2人点赞 PingD 阅读全文
Golang

Go查看项目引用的包版本及当前最新的版本

有时候我们需要知道当前项目引用的外部pkg是否是最新的版本,而如果通过go.mod里面一个一个去看明显显得有一点点弱,此时我们可以采用go list这个命令,直接查看当前项目的引用版本以及最新的版本,命令如下:go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all 执行后如下: ➜ go list -u -m -f '{{if not .Indirect}}{{.}}{{end}}' all git.querycap.c…

2020年8月18日 0条评论 2359点热度 1人点赞 PingD 阅读全文
ETCD

Etcd raft 原理动画演示

Raft The Secret Lives of Data

2019年9月3日 0条评论 1153点热度 1人点赞 PingD 阅读全文
脚本

MySQL配置文件my.cnf查找

当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。而在MySQL数据库中,可以没有配置文件,在这种情况下,MySQL会按照编译时的默认参数设置启动实例。常常因为想看一下MySQL里面的配置my.cnf,却苦于找不到这个文件的存放位置。下面是常用的三个查找方法,快准狠! ps 利用ps命令。mysql启动时往往携带很多启动参数,看看是否有启动指定的配置文件,命令如下:ps aux|grep mysql 命令ps aux|grep mysql|grep 'my.cnf…

2019年7月18日 0条评论 1408点热度 3人点赞 PingD 阅读全文
Golang

Golang之HTTP EOF/connection reset by peer详解

背景 使用net/http同时发起多个简单请求时,偶尔会出现EOF或connect: connection reset by peer的情况。明明就是一个很简单的例子,为何会出现这种情况呢? 举例 这里我为了省事,直接套用网上其他人的客户端的例子: req, err := http.NewRequest(method, url, body) if err !=nil{ return nil, err } resp, err := http.DefaultClient.Do(req) if err !=nil{ re…

2019年6月10日 0条评论 7061点热度 14人点赞 PingD 阅读全文
Golang

Golang之服务配置自动初始化

背景 今天分享一个利用reflect在实际项目中比较省时、代码简洁且高效的方法-服务配置自动初始化的方法。 我们在起一个Web项目时,常常都是直接使用开源的一些框架或组建,然后在我们自己的项目中要使用之前按照该框架或组建提供的帮助文档一个一个进行相应的初始化配置。也许我们只引用其中一两个,这样写都还能忍受,可是如果这个服务会引用更多的呢? 效果 代码简洁化 接入第三方库就如搭积木一样,模块化,随取随用 可维护性高 干货 下面,我们就来利用reflect实现该功能。 思路 磨刀不误砍柴工,我们先整理好一个简单思路,然…

2019年4月24日 0条评论 1063点热度 0人点赞 PingD 阅读全文
123

PingD

反思让我成长

归档
  • 2023年1月
  • 2022年3月
  • 2022年1月
  • 2021年10月
  • 2021年8月
  • 2021年4月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2019年9月
  • 2019年7月
  • 2019年6月
  • 2019年4月
  • 2019年3月
分类
  • ETCD
  • Golang
  • 总结
  • 脚本
  • 随笔
最近评论

COPYRIGHT © 2021 dpjeep.com. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

蜀ICP备18036663号-1