作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我曾在一年多前设计了一种 VictoriaMetrics 监控系统的历史群集的部署方法,并把部署方式进行了开源:https://github.com/ahfu ...
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 读了大约半天的 vmagent 的代码,为了确定一些特定的用法的实现逻辑。 增加了很多中文注释,并且把代码提交到了:https://github.com/ah ...
ezBookkeeping —— 一款轻量、自托管的个人记账应用,基于 Go + Vue 构建,拥有用户友好的界面和强大的记账功能。 ...
引言:从Gin的Context池化,揭开sync.Pool的神秘面纱 在编写高性能的Go Web服务时,我们总是追求极致的效率。但在高并发场景下,频繁的对象创建和销毁是隐藏在背后的性能杀手。 在《Gin 框架核心架构解析》中,我们提到Gin会为每个HTTP请求分配一个Context对象。当你的服务每 ...
WebCurl —— 一个极致轻量、跨平台、无依赖的 HTTP 请求转发与调试工具,本质上就是一个网页版的 API 测试与调试工具,适合接口开发、调试、测试等多种场景。 ...
最近公司里的新人问了我一个问题:这段代码是啥意思。这个问题很普通也很常见,我还是个新人的时候也经常问,当然,现在我不是新人了但我也经常发出类似的提问。 代码是长这样的: type BussinessObject struct { _ [0]func() ID uint64 FieldA string ...
本文首发于公众号:Hunter后端 原文链接:Golang笔记之Redis 这一篇笔记主要介绍 Golang 连接和使用 Redis,以下是本篇笔记目录: 目录1、安装模块2、连接 Redis3、字符串1. 字符串写入2. 字符串读取4、哈希1. 写入1) 单字段写入2) 多字段写入2. 读取1) ...
很多初级甚至中级开发会滥用atomic,因为在他们的世界观里atomic比mutex轻量,性能总是优于锁的。 这话不能算错,但有个很重要的前提,那就是原子操作竞争不激烈的时候。 “竞争激烈”是指什么呢,指的是有很多线程在同一个资源上大量执行原子操作的情况。 落在这种情况下原子操作反而会成为性能拖油瓶 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十六之反射 反射可以用于程序在运行时检查、修改自身类型和值,主要通过 reflect 包实现。 首先,我们提出一个需求,要打印出一个结构体 struct 的各个字段及其对应的标签数据,按照当前的笔记内容是无法解决该问题的,但是我们可以 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十五之sync 这一篇笔记介绍 Golang 中的 sync 模块。 sync 包主要提供了基础的同步原语,比如互斥锁,读写锁,等待组等,用于解决并发编程中的线程安全问题,以下是本篇笔记目录: WaitGroup-等待组 sync.M ...
docker.ui —— 一个可视化的 Docker 容器镜像图形管理工具,用于搭建、管理和维护 Docker 环境,完全开源免费。 ...
原代码 func AtomicCounterDemo() { var count int32 var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() for j := 0; j < 1 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十四之文件操作 这一篇笔记介绍 Golang 里文件的相关操作,主要用的库是 io。 以下是本篇笔记目录: 文件读取 文件写入 文件追加 os.OpenFile() 文件属性 1、文件读取 1. 文件的打开与关闭 1) os.Open ...
最近在学习Go, 打算写点小项目来练手,实现的过程中发现需要在slice上执行Filter操作,但是标准库没有提供,像go-stream这些库提供的又是比较高级的抽象,所以就有了Lapluma这个库 仓库地址:lapluma 核心设计理念 Lapluma旨在提供一套简洁、可组合且易于理解的数据处理工 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十三之context 在 Golang 里,context 包提供了很多比如传递截止时间、取消信号、传递数据等操作的标准方式,用于在跨 API 边界、进程和 goroutine之间进行。 这一篇笔记详细介绍一下 context 包相关 ...
在 Go 语言中,append 后面的三个点 ... 是展开操作符(spread operator) 基本概念 ... 用于将切片展开为独立的元素,传递给函数或 append 函数。 代码: s4 = append(s4[:2], append([]int{3}, s4[2:]...)...) 分解 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十二之defer、panic、error 本篇笔记介绍一下 Golang 里 defer、panic 和 error 的相关概念和操作,以下是本篇笔记目录: defer panic error 1、defer defer 语句用于延迟 ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记十之goroutine和channel 这一篇介绍 Golang 里的 goroutine 和 channel 通道。 以下是本篇笔记目录: goroutine channel goroutine 与 channel 的使用 1、go ...
本文首发于公众号:Hunter后端 原文链接:Golang基础笔记九之方法与接口 本篇笔记介绍 Golang 里方法和接口,以下是本篇笔记目录: 方法 接口 用结构体实现类的功能 1、方法 首先介绍一下方法。 方法是与特定类型关联的函数,我们在实现一个函数前,绑定一个类型,就实现了这个类型的方法。 ...
大家好,我是 Java陈序员。 在企业运营中,知识分享与团队协同面临着诸多难题,缺乏统一平台、知识更新不及时等。 今天,给大家介绍一款开源的 Wiki, 可快速构建企业和团队知识分享平台! 关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 ...