代码改变世界

随笔分类 -  Go

脑洞golang embed 的使用场景

2024-04-12 10:06 by 轩脉刃, 363 阅读, 收藏, 编辑
摘要: golang 的 embed 的功能真是一个很神奇的功能,它能把静态资源,直接在编译的时候,打包到最终的二进制程序中。 为什么会设计这么一个功能呢?我想和 golang 的崇尚简单的原则有关系吧。它希望的是一个二进制文件能走天下,那么如果你作为一个 web 服务器,还需要依赖一大堆的静态文件,终究不 阅读全文

pprof - 在现网场景怎么用

2024-04-08 10:00 by 轩脉刃, 554 阅读, 收藏, 编辑
摘要: 如何使用 pprof 来定位现网 Golang 问题,已经是一名 Gopher 所需要掌握的必备技能了。我们在实际工作中也经常使用它来定位现网问题。网上有很多文章来描述 pprof 的使用,但是实际的线上使用场景,却和各个文章的描述的多少有些差异。 比如网上大部分文章都会告诉你,使用命令行打开 we 阅读全文

fyne - 谁说用Go不能开发应用界面

2024-03-20 09:58 by 轩脉刃, 3184 阅读, 收藏, 编辑
摘要: fyne项目介绍 fyne 是一个纯 Golang 的跨平台 GUI 库,跨平台库说实话,是有很多选择的,Flutter、Electron、QT等。fyne 绝对不是一个很大众的选择。但是在我,一名后端程序员尝试使用 Electron实现一个简单的番茄时钟,痛苦地在使用 js 如何在渲染进程和主进程 阅读全文

concurrent-map 和 sync.Map,我该选择哪个?

2023-02-21 07:43 by 轩脉刃, 2353 阅读, 收藏, 编辑
摘要: concurrent-map 和 sync.Map,我该选择哪个? 官方的map并不是线程安全的,如果我们在多线程中并发对一个map进行读写操作,是会引发panic的。解决方案除了使用锁来对map进行保护外,还有两种方式: 一,开源项目 concurrent-map 提供了可以用来做并发安全的map 阅读全文

go/parser的使用

2023-01-30 08:21 by 轩脉刃, 1083 阅读, 收藏, 编辑
摘要: 想用golang来解析一个golang的项目,我们需要用官方的库go\parser 我们要先解析.gitignore: // parse .gitignore ignoreFile := []string{} ignoreFolder := []string{} content, err := os 阅读全文

electron + go 如何从sqlite获取数据

2023-01-04 14:51 by 轩脉刃, 1159 阅读, 收藏, 编辑
摘要: 我现在的数据在sqlite中,保存在mac本地的一个文件中。用了electron+vue搭建了一个客户端。 我大概希望是这样的逻辑,先加载本地db文件,然后再获取数据。 这里就有一个问题,我怎么获取sqlite中的数据呢?从哪里加载呢? 思考 electron的进程分为master Process 阅读全文

Golang可重入锁的实现

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

Golang中常用的代码优化点

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

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

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

redis的事件处理机制

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

如何封装安全的go

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

为hade增加model自动生成功能

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

golang切片的一些自问自答

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

golang 数组的一些自问自答

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

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

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

丈量你的代码,从cloc开始

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

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

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

collection库更新1.4.0版本

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

谈服务可用性监控

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

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

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