代码改变世界

Golang可重入锁的实现

2022-05-25 10:42 by 轩脉刃, 698 阅读, 1 推荐, 收藏, 编辑
摘要:Golang可重入锁的实现 项目中遇到了可重入锁的需求和实现,具体记录下。 什么是可重入锁 我们平时说的分布式锁,一般指的是在不同服务器上的多个线程中,只有一个线程能抢到一个锁,从而执行一个任务。而我们使用锁就是保证一个任务只能由一个线程来完成。所以我们一般是使用这样的三段式逻辑: Lock(); 阅读全文

MYSQL如何比对版本号字符串

2022-05-17 09:28 by 轩脉刃, 448 阅读, 0 推荐, 收藏, 编辑
摘要:MYSQL如何比对版本号字符串 mysql 数据库中存储了一个形如“2.7.6.526” 的版本号,现在要获取出小于某个版本号的数据,怎么做?这个就是昨天遇到的一个问题,记录下查到的解决方法: SELECT * FROM device_table WHERE CONCAT( LPAD(SUBSTRI 阅读全文

Golang中常用的代码优化点

2022-03-29 09:45 by 轩脉刃, 583 阅读, 2 推荐, 收藏, 编辑
摘要:Golang中常用的代码优化点 大家好,我是轩脉刃。 这篇想和大家聊一聊golang的常用代码写法。在golang中,如果大家不断在一线写代码,一定多多少少会有一些些代码的套路和经验。这些经验是代表你对一些问题,或者一类问题的思考和解决。处理一个问题的方法有很多,如果频繁遇到同样的场景和问题,我们会 阅读全文

一种优雅的Golang的库插件注册加载机制

2022-03-28 09:22 by 轩脉刃, 724 阅读, 1 推荐, 收藏, 编辑
摘要:一种优雅的Golang的库插件注册加载机制 你好,我是轩脉刃。 最近看到一个内部项目的插件加载机制,非常赞。当然这里说的插件并不是指的golang原生的可以在buildmode中加载指定so文件的那种加载机制。而是软件设计上的「插件」。如果你的软件是一个框架,或者一个平台性产品,想要提升扩展性,即可 阅读全文

redis的事件处理机制

2022-03-24 09:33 by 轩脉刃, 473 阅读, 1 推荐, 收藏, 编辑
摘要:redis的事件处理机制 redis是单进程,单线程模型,与nginx的多进程不同,与golang的多协程也不同,“工作的工人”那么少,可那么为什么redis能这么快呢? epoll多路复用 这里重点要说的就是redis的IO编程模型,首先了解下 为什么要有多路复用呢? 如果没有多路复用,一个线程只 阅读全文

如何封装安全的go

2022-02-22 09:59 by 轩脉刃, 511 阅读, 0 推荐, 收藏, 编辑
摘要:如何封装安全的go 在业务代码开发过程中,我们会有很大概率使用go语言的goroutine来开启一个新的goroutine执行另外一段业务,或者开启多个goroutine来并行执行多个业务逻辑。所以我为hade框架增加了两个方法goroutine.SafeGo 和 goroutine.SafeGoA 阅读全文

为hade增加model自动生成功能

2022-02-15 09:56 by 轩脉刃, 252 阅读, 0 推荐, 收藏, 编辑
摘要:大家好,我是轩脉刃。 我们写业务的时候和db接触是少不了的,那么要生成model也是少不了的,如何自动生成model,想着要给hade框架增加个这样的命令。 看了下网上的几个开源项目,最终聚焦在两个项目中: https://github.com/go-gorm/gen https://github. 阅读全文

golang切片的一些自问自答

2021-12-29 10:04 by 轩脉刃, 368 阅读, 0 推荐, 收藏, 编辑
摘要:你好,我是轩脉刃。这篇是关于go切片的一些问题和回答。 go的切片基本上是代码中使用最多的一种数据结构了,使用这种数据结构有哪些要注意的点,这个是非常必要了解的东西。基本上,以前写的一篇博客 https://www.cnblogs.com/yjf512/p/9531282.html 就说的很清楚了。 阅读全文

golang 数组的一些自问自答

2021-12-27 10:25 by 轩脉刃, 204 阅读, 0 推荐, 收藏, 编辑
摘要:所有代码基于Go-1.17。一些研究Go数组的自问自答,可以考虑作为面试题。 问题:静态存储区是什么?和堆/栈有什么区别? 回答: 可以参考下列图 堆上存放new产生的大块内存 栈上存放的是程序运行的时候使用的局部变量内存 代码段和数据段可以统一称为静态存储区 代码段存放的就是程序的二进制文件 数据 阅读全文

SSA:终于知道编译器偷摸做了哪些事

2021-12-22 14:51 by 轩脉刃, 577 阅读, 1 推荐, 收藏, 编辑
摘要:你好,我是轩脉刃。 在golang中,我们可以使用go tool compile -S main.go 工具将一个go程序直接转换为汇编代码。但是你会发现,最终编译出来的汇编代码其实是已经被优化过了的,编译器其实很聪明,甚至将一些函数合并,取消等。至于这个过程,并不是一蹴而就的,在golang代码和 阅读全文