redis vs etcd 分布式锁实现

在构建分布式系统时,确保数据一致性和操作原子性至关重要。分布式锁是实现这一目标的关键工具,它允许多个节点在共享资源上进行互斥访问。本文将深入探讨两种主流的分布式锁实现:基于 Redis 的分布式锁和基于 etcd 的分布式锁,分析它们的原理、核心问题、解决方案,并提供相应的 Golang 代码示例。 Redis 分布式锁Redis 因其高性能、单线程执行命令的原子性以及丰富
阅读全文

NATS JetStream 介绍及实际应用

前言在现代微服务架构中,消息队列扮演着至关重要的角色,它负责服务间的解耦、异步通信和流量削峰。NATS 是一个追求极致性能、简洁和可扩展性的消息系统。然而,核心 NATS (Core NATS) 是一个纯粹的内存消息总线,不提供消息持久化,这意味着如果服务下线或重启,消息就会丢失。为了解决这个问题,NATS 团队推出了 JetStream——一个内建于 NATS Server 的
阅读全文

golang channel数据的接收发送流程

Channel底层数据结构说明```gotype hchan struct { qcount uint // 用于记录当前通道队列中已有的数据元素数量 dataqsiz uint // 指定了通道的循环队列(缓冲区)的大小。也就是通道最多能容纳的数据元素数量 buf unsafe.Pointer // 指
阅读全文

Go 语言中 uintptr和unsafe.Pointer 的区别

`unsafe.Pointer`1. 定义: `unsafe.Pointer` 是一种特殊的指针类型。它可以指向任意类型的数据。你可以把它看作是 C 语言中的 `void`,但功能更受限,主要用于类型转换。2. 类型安全: 顾名思义,使用 `unsafe.Pointer` 会绕过 Go 的类型安全检查。编译器不会阻止你将一个 `int` 转换为 `unsafe.Pointer`,
阅读全文

为什么说golang参数传递皆是值传递?

什么是值传递 (PassbyValue)?值传递的核心思想是:当一个变量作为参数传递给函数时,函数接收到的是该变量的一个副本 (copy),而不是变量本身。 函数内部对这个副本的任何操作,都不会影响到函数外部的原始变量。 值类型 (Value Types) 的传递Go 中的基本类型(如 `int`, `float`, `string`, `bool`)、结构体 (`str
阅读全文

链路追踪基础&gf中的应用

链路追踪基础&gf中的应用 前言在微服务架构的系统中,请求在各服务之间流转,调用链错综复杂,一旦出现问题和异常,很难追查定位。链路追踪系统能够追踪并记录请求在系统中的调用顺序、调用时间等一系列关键信息,从而帮助我们定位异常服务和发现性能瓶颈。 OpenTelemetry分布式追踪(OpenTelemetry) 是一个开源的可观测性框架,旨在帮助开发者收集、处理和导
阅读全文

Go 1.23 新特性之slices 和 sync核心库

slices新特性Go 1.23 版本于2024年8月14日发布,带来了多项重大更新。本文将重点介绍 `slices`、`sync` 等核心库的小改进,这些改进将大幅提升开发体验。 slices 库的新增特性 Repeat 函数`slices` 库新增了一个 `Repeat` 函数,该函数返回一个新切片,该切片是将原始切片重复指定次数后的结果。函数签名:
阅读全文

Go 1.23 新版本 Timer 和 Ticker 的重要优化

Timer 和 Ticker 的基本概念在深入探讨 Go 1.23 版本对 Timer 和 Ticker 定时器进行的优化之前,以下是关于这两种定时器的基本介绍: Timer:一次性定时器,用于在未来的某一时刻执行一次操作。常用于单次延迟执行任务。 Ticker:周期性定时器,用于在固定的时间间隔重复执行任务。常用于重复执行任务。 垃圾回收的改进 Go 1.2
阅读全文

Golang设计模式之模板方法模式

模板方法模式模板方法模式是一种行为型设计模式,它在父类中定义一个算法的框架,允许子类在不改变算法结构的情况下重写算法的某些特定步骤。这种模式通过把不变的部分代码放在父类中,把可变的行为延迟到子类中实现,从而提高了代码的复用性。 模板方法模式中的角色 AbstractClass(抽象类):定义了模板方法和算法的框架。它实现了一些步骤,这些步骤可以是具体的方法也可以是抽象方法
阅读全文

Go 1.23 新版本新特性之迭代器

Go1.23新特性Go 1.23 版本于2024年8月14日发布,带来了多项重大更新。本文将重点介绍 Go 1.23 版本中的迭代器(iterator)功能,这是对 Go 语言生态系统的一次重要改进。 为什么引入标准迭代器在 Go 语言中,迭代器并非新概念,但现有的迭代器设计和使用方式各不相同。为了统一迭代器的标准化形式,Go 1.23 版本引入了标准迭代器,使得开发者只
阅读全文