跳转至

Golang 编程实践

当 AI 开始"圆桌讨论":一次代码决策的新体验

你有没有遇到过这样的情况:面对一段代码的写法,直觉上觉得 A 方案更好,但说不出具体为什么。问同事,大家各执一词;翻资料,众说纷纭。最后只能靠"少数服从多数"或者"谁写的谁决定"来收场。

这不是技术问题,而是 决策问题

上周我在修改 SDK 项目的连接池代码时,就遇到了这样的困境。但这一次,我尝试了一种全新的方式——让 AI 进行一场"圆桌讨论"。

一次重复回调引发的库存事故:Go 服务幂等设计实战

引子

很多后端同学都遇到过这个场景:线上流量很稳,监控没报错,但运营突然来问,为什么同一个订单扣了两次库存。排查一圈后发现,请求本身不是“错”,而是“重复到了”。

在单机时代,“重复请求”通常只是日志里多一行;但在分布式系统里,重试、超时补偿、消息重放、网关抖动都可能让同一业务动作执行多次。幂等做不好,业务结果就会悄悄偏离预期。

高性能滑动窗口缓存设计:环形缓冲区 + 分片锁

AI 辅助生成

本文由 CodeBuddy AI 辅助整理生成,代码来源于作者的学习实践。

在区块链、日志系统等场景中,我们经常需要缓存「最近 N 条」数据,并支持按 ID 快速查询。本文介绍一个高性能的滑动窗口缓存实现,支持 O(1) 时间复杂度的查询和高并发写入。

Go TCP 网络编程实战:Echo、Proxy、Scanner

AI 辅助生成

本文由 CodeBuddy AI 辅助整理生成,代码来源于作者的学习实践。

TCP 是网络编程的基础,掌握 TCP 编程能让你更好地理解网络通信原理。本文通过三个经典案例,带你从零实现 TCP 服务端、代理和扫描器。

理解 Go 语言中的 NoCopy 机制

在 Go 语言中,NoCopy 是一种通过嵌入字段来防止结构体被拷贝的技巧。这种机制广泛应用于需要避免结构体拷贝的场景,例如同步原语或特定的资源管理。

NoCopy 的作用

NoCopy 的作用并非直接阻止结构体被拷贝,而是通过以下两种方式帮助开发者:

  1. 开发约定:通过代码设计提醒开发者这个结构体或其字段不应该被拷贝。
  2. 静态检查:借助工具(如 go vet),检测代码中是否有拷贝 NoCopy 类型的行为,从而提示潜在问题。

理解 Go 语言中结构体拷贝和锁的行为

在 Go 语言中,结构体的拷贝是一个常见的操作,但是当结构体中包含复杂字段(如指针或 sync.Mutex)时,其行为可能会带来一些意想不到的问题。本文将通过几个具体问题,带你深入了解结构体拷贝、锁的独立性,以及这些设计的背后逻辑。

深入理解 Go 的原子操作与 unsafe.Pointer

在高并发编程中,原子操作是一种关键技术,用于确保多线程环境下对共享资源的安全操作。本文将深入探讨 Go 中原子操作的原理,为什么需要使用 unsafe.Pointer,以及这些操作如何与底层 CPU 的指令配合实现线程安全。

无锁编程:内存屏障与无锁栈、队列的实现

在多核处理器和高并发编程中,性能优化是非常重要的一个方向,尤其是在处理共享资源的访问时。传统的锁(如 sync.Mutex)虽然能够保证线程安全,但会带来显著的性能开销。为了应对高并发场景下的性能瓶颈,无锁编程技术应运而生,其中包括原子操作、内存屏障、无锁栈和无锁队列的实现。本文将详细介绍这些概念以及它们的实现方式。

读写分离 sync.Map

sync.Map 是 Go 语言中的一个并发安全的映射(map)实现,设计目的是为了在高并发环境下提高读操作的性能。它支持读写分离,以优化读操作的性能,同时保持对写操作的安全性。以下是 sync.Map 的详细解释及其读写分离特性:

1. sync.Map 概述

sync.Map 是 Go 1.9 及以后版本引入的一个并发安全的映射类型,提供了以下特性:

  • 并发安全sync.Map 支持并发读写操作,读操作和写操作都能安全地在多个 Goroutine 中进行。
  • 读写分离sync.Map 内部实现优化了读操作的性能,特别是在高并发场景下。