代码改变世界

随笔分类 - Go

Golang可重入锁的实现

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

Golang中常用的代码优化点

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

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

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

redis的事件处理机制

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

如何封装安全的go

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

为hade增加model自动生成功能

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

golang切片的一些自问自答

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

golang 数组的一些自问自答

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

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

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

丈量你的代码,从cloc开始

2021-12-19 15:50 by 轩脉刃, 537 阅读, 收藏, 编辑
摘要: 如果我想统计我当前的项目有多少代码量?行数最高的代码文件有哪些?并且排除某些目录,怎么统计?要统计出注释多少行,和代码多少行?使用cloc就行。 cloc是一款使用Perl语言开发的开源代码统计工具,支持多平台使用、多语言识别。 mac上安装cloc还是用brew最为简单, brew install 阅读全文

我的极客时间专栏结课了!!!

2021-12-17 01:16 by 轩脉刃, 669 阅读, 收藏, 编辑
摘要: 我的极客时间专栏结课了!!! 我的极客时间专栏结课了!!!太TMD不容易了。 今天下班到家的时候,收到了一份包裹,里面是极客时间送的结课礼物。是的,我的《手把手带你写一个web框架》专栏终于结课了。 “老师总计输出了38篇文字,约321458字,总计上线音频时长11小时13分34秒。“ ”积土成山, 阅读全文

collection库更新1.4.0版本

2021-12-12 22:43 by 轩脉刃, 232 阅读, 收藏, 编辑
摘要: collection库更新1.4.0版本 collection库一直在使用中,周末集合github上的反馈以及contributor的修改,更新了1.4.0版本。 这个版本做了几个事情: 增加了三种类型, uint, uint32, uint64 这三种类型也算基础类型了,目前基本上已经把所有基础类 阅读全文

谈服务可用性监控

2020-12-24 10:00 by 轩脉刃, 1650 阅读, 收藏, 编辑
摘要: 谈服务可用性监控 一个服务的监控从整体考虑,要达到哪些才能算是完善的?我想,如果没有一个全局性的监控思考,一个服务的监控即使加的再多也是会有监控盲区的。 监控的层次 从基础机器到上层业务,分为三个不同层次:系统,应用,业务。不同的层次都应该有其不同的监控目的。 系统监控 这个层次监控服务所在服务器的 阅读全文

​grafana 的主体架构是如何设计的?

2020-12-21 17:51 by 轩脉刃, 1688 阅读, 收藏, 编辑
摘要: ​grafana 的主体架构是如何设计的? grafana 是非常强大的可视化项目,它最早从 kibana 生成出来,渐渐也已经形成了自己的生态了。研究完 grafana 生态之后,只有一句话:可视化,grafana 就够了。 这篇就想了解下它的主体架构是如何设计的。如果你对 grafana 有兴趣 阅读全文

一篇理解什么是CanSet, CanAddr?

2020-10-27 12:38 by 轩脉刃, 603 阅读, 收藏, 编辑
摘要: 什么是可设置( CanSet ) 首先需要先明确下,可设置是针对 reflect.Value 的。普通的变量要转变成为 reflect.Value 需要先使用 reflect.ValueOf() 来进行转化。 那么为什么要有这么一个“可设置”的方法呢?比如下面这个例子: var x float64 阅读全文

collection v1.3.1升级全记录

2020-10-22 13:27 by 轩脉刃, 367 阅读, 收藏, 编辑
摘要: collection v1.3.1升级全记录 项目地址: https://github.com/jianfengye/collection 欢迎star。 collection 手册地址: http://collection.funaio.cn/ collection库升级到v1.3.1版本。 从v 阅读全文

使用golang理解mysql的两阶段提交

2020-04-07 08:49 by 轩脉刃, 1877 阅读, 收藏, 编辑
摘要: 使用golang理解mysql的两阶段提交 文章源于一个问题:如果我们现在有两个mysql实例,在我们要尽量简单地完成分布式事务,怎么处理? 场景重现 比如我们现在有两个数据库,mysql3306和mysql3307。这里我们使用docker来创建这两个实例: 在mysql3306中 我们有一个us 阅读全文

Golang最强大的访问控制框架casbin全解析

2020-01-16 11:09 by 轩脉刃, 21086 阅读, 收藏, 编辑
摘要: Golang最强大的访问控制框架casbin全解析 Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。目前这个框架的生态已经发展的越来越好了。提供了各种语言的类库,自定义的权限模型语言,以及模型编辑器。在各种语言中,golang的支持还是最全的,所以我们就研究ca 阅读全文

golang实现依赖注入

2019-12-30 19:24 by 轩脉刃, 8449 阅读, 收藏, 编辑
摘要: golang实现依赖注入 依赖注入是软件工程中经常使用到的一种技术,它提供了一种控制反转的机制,把控制权利交给了调用方。调用方来决定使用哪些参数,哪些对象来进行具体的业务逻辑。 它有几个好处: 1 它让调用方更灵活。 2 大量减少定义类型的代码量 3 增加代码的可用性,因为调用方只需要关注它需要的参 阅读全文

你技术这么好,总要改变点什么把!

2019-10-07 15:40 by 轩脉刃, 3913 阅读, 收藏, 编辑
摘要: 你技术这么好,总要改变点什么把! 这篇文章我很早就想写了,工作至今(10年)我对于技术这个东西的体会也越来越多。今天触发我动键盘敲字的是一个事情:我在准备做一个golang内存模型的ppt,准备节后给组内同学分享。但是过程中遇到问题,就谷歌了一下,搜出了我自己16年写的一篇文章。。。我才记起来,16 阅读全文